30,Python数分之Pandas训练,力扣,618. 学生地理信息报告

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用

目录

一,原题力扣链接

二,题干

三,建表语句

四,分析

五,Pandas解答

六,验证

七,知识点总结


一,原题力扣链接

. - 力扣(LeetCode)

二,题干

表: student 

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| name        | varchar |
| continent   | varchar |
+-------------+---------+
该表可能包含重复的行。
该表的每一行表示学生的名字和他们来自的大陆。

一所学校有来自亚洲、欧洲和美洲的学生。

编写解决方案实现对大洲(continent)列的 透视表 操作,使得每个学生按照姓名的字母顺序依次排列在对应的大洲下面。输出的标题应依次为美洲(America)、亚洲(Asia)和欧洲(Europe)。

测试用例的生成保证来自美国的学生人数不少于亚洲或欧洲的学生人数。

返回结果格式如下所示。

示例 1:

输入: 
Student table:
+--------+-----------+
| name   | continent |
+--------+-----------+
| Jane   | America   |
| Pascal | Europe    |
| Xi     | Asia      |
| Jack   | America   |
+--------+-----------+
输出: 
+---------+------+--------+
| America | Asia | Europe |
+---------+------+--------+
| Jack    | Xi   | Pascal |
| Jane    | null | null   |
+---------+------+--------+

进阶:如果不能确定哪个大洲的学生数最多,你可以写出一个查询去生成上述学生报告吗?

当然可以 len嘛

三,建表语句


import pandas as pd

data = [['Jane', 'America'], ['Pascal', 'Europe'], ['Xi', 'Asia'], ['Jack', 'America']]
student = pd.DataFrame(data, columns=['name', 'continent']).astype({'name':'object', 'continent':'object'})
student

四,分析

pandas中的逻辑

第一步:开三个新列 分别if判断 如果是name就是name 如果不是就是NAN

 

第二步: 这三个新列分别拿出来,并且这三个列分别排序

第三步:去除nan的值,重置其索引

第四步:大python超级强大的拼接方法 join 直接横向拼接这3个列 

五,Pandas解答

import pandas as pd

def geography_report(student: pd.DataFrame) -> pd.DataFrame:
    def fun1(x):
        if x['continent'] =='America':
            return x['name']
    def fun2(x):
        if x['continent'] =='Asia':
            return x['name']
    def fun3(x):
        if x['continent'] =='Europe':
            return x['name']

    student['America'] = student.apply(fun1,axis=1)
    student['Asia'] = student.apply(fun2,axis=1)
    student['Europe'] = student.apply(fun3,axis=1)
    
    s1 = student['America'].dropna().to_frame().sort_values('America')
    s2 = student['Asia'].dropna().to_frame().sort_values('Asia')
    s3 = student['Europe'].dropna().to_frame().sort_values('Europe')

    s1 = s1.reset_index(drop = True)
    s2 = s2.reset_index(drop = True)
    s3 = s3.reset_index(drop = True)
    # df = s1.join(s2).join(s3)
    df = pd.concat([s1,s2,s3],axis=1)
    return df
geography_report(student)

六,验证

七,知识点总结

  • Pandas中自定义函数的运用 实现sql中if 或者case when的效果 API:apply
  • Pandas中去除NAN值的运用 API:dropna
  • Pandas中转成df对象的运用  API:to_frame 
  • Pandas中排序的运用  API:sort_values
  • Pandas中重置索引的运用  API: reset_index
  • Pandas中横向合并的运用 API:join 或者concat
  • 手动实现一个透视表的效果 

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值