pandas groupby 和 lambda 函数返回 nlargest(2)

请参阅熊猫 df:


pd.DataFrame({'id': [1, 1, 2, 2, 2, 3],

            'pay_date': ['Jul1', 'Jul2', 'Jul8', 'Aug5', 'Aug7', 'Aug22'],

             'id_ind': [1, 2, 1, 2, 3, 1]})

我正在尝试按“id”和“pay_date”进行分组。我只想在按“id”和“pay_date”分组后将 df['id_ind'].nlargest(2) 保留在数据框中。这是我的代码:


df = pd.DataFrame(df.groupby(['id', 'pay_date'])['id_ind'].apply(

lambda x: x.nlargest(2)).reset_index()

这不起作用,因为新的 df 返回所有记录。如果有效,'id'==2 只会在 df 中出现两次,因为有 3 条记录,而我只想要 2 个最大的'id_ind'。


我想要的输出:


pd.DataFrame({'id': [1, 1, 2, 2, 3],

        'pay_date': ['Jul1', 'Jul2', 'Aug5', 'Aug7', 'Aug22'],

         'id_ind': [1, 2, 2, 3, 1]})


月关宝盒
浏览 129回答 1
1回答

BIG阳

排序id_ind和做groupby.taildf_final = (df.sort_values('id_ind').groupby('id').tail(2)                                    .sort_index()                                    .reset_index(drop=True))Out[29]:   id  id_ind pay_date0   1       1     Jul11   1       2     Jul22   2       2     Aug53   2       3     Aug74   3       1    Aug22
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python