代码之家  ›  专栏  ›  技术社区  ›  HHH

如何在python/pandas中执行groupby后续order by,然后选择第一行

  •  0
  • HHH  · 技术社区  · 7 年前

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

    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'
    

    这里缺少什么?

    1 回复  |  直到 7 年前
        1
  •  0
  •   jpp    7 年前

    你可以 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()
    

    您的代码不起作用,因为您正在应用 第一 数据帧而不是 GroupBy 对象。你需要通过 第一 子句 作为聚合函数。