首页 > 解决方案 > 如何按顺序执行 groupby 然后在 python/pandas 中选择第一行

问题描述

我有一个数据框,我想按两列分组,然后按第三列排序,然后从每组中选择第一行。这是我正在使用的代码

first= df.groupby(['EMPLID','EMPL_RCD']).apply(lambda x: x.sort_values(by = ['EFFDT','EFFSEQ'], ascending = True)).first()

但是运行它时出现以下错误

first() missing 1 required positional argument: 'offset'

这里缺少什么?

标签: pythonpandaspandas-groupby

解决方案


你可以sort_values然后drop_duplicates

res = df.sort_values(['EFFDT','EFFSEQ'])\
        .drop_duplicates(subset=['EMPLID','EMPL_RCD'])

或者,您可以排序然后使用groupby+ first

res = df.sort_values(['EFFDT','EFFSEQ'])\
        .groupby(['EMPLID','EMPL_RCD']).first()

您的代码不起作用,因为您应用first的是数据框而不是GroupBy对象。您需要作为聚合函数传递first给。groupby


推荐阅读