- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
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
- 手动实现一个透视表的效果
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用