pyodps中一些经验:取分组排序后的第一条数据
【摘要】
注意:未经允许不得转载, 允许后转载请注明出处
pyodps中有很多本来在pandas中一个API解决的东西却要想半天才能搞定。
pandas中在groupby后只要用first就可以去出分组后的第一行。
例如:
# 以student_id为分组列,然后取出分组后每组的第一条数据df_stu_frist_course = df_...
注意:未经允许不得转载, 允许后转载请注明出处
pyodps中有很多本来在pandas中一个API解决的东西却要想半天才能搞定。
pandas中在groupby后只要用first就可以去出分组后的第一行。
例如:
-
# 以student_id为分组列,然后取出分组后每组的第一条数据
-
df_stu_frist_course = df_stu_course.groupby('student_id').first()
然而pyodps中却很坑爹,没有什么first,只能自己想办法。这里我又添加了一个排序
例如:
# 首先用student_id进行分组,然后用student_id和gmt_create进行排序,最后用窗口函数nth_value取分组中的第一个值并改名first_course_id, 并将其他字段输出
-
-
df_group = df.groupby('student_id')
-
df_inst_stu_cou = df_inst_stu_cou['student_id', df_group.sort(['student_id', 'gmt_create'], ascending=[True, False]).course_id.nth_value(0).rename('first_course_id')]
-
-
# 但是这是并不是取出第一行,而是将所有以student_id分为一组的数据的其他列数据都改为排序后的第一个值, 也就是说原df_inst_stu_cou还没有分组,只是添加了分组的后取出第一个值的一列,所以我们要以student_id分组去重。
所以我们只要再以student_id分组,然后用聚合函数cat将其他所有的列按照行进行连接(这里我的连接符选择了逗号),然后在map函数中用split分割成列表取第一个即可
-
df = df.groupby('student_id').agg(df.first_course_id.cat(sep=',').rename('first_course_ids'))
-
-
df['first_course_name'] = df.first_course_names.map(lambda x: x.split(',')[0], 'string')
文章来源: blog.csdn.net,作者:橙子园,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Chenftli/article/details/86626842
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)