熊猫groupby和lambda函数返回nlargest(2)

时间:2020-07-30 17:23:40

标签: python python-3.x pandas lambda pandas-groupby

请参阅熊猫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条记录,而我只希望“ id_ind”记录最多2条。

我想要的输出:

pd.DataFrame({'id': [1, 1, 2, 2, 3],
        'pay_date': ['Jul1', 'Jul2', 'Aug5', 'Aug7', 'Aug22'],
         'id_ind': [1, 2, 2, 3, 1]})

1 个答案:

答案 0 :(得分:2)

id_ind上排序并进行groupby.tail

df_final = (df.sort_values('id_ind').groupby('id').tail(2)
                                    .sort_index()
                                    .reset_index(drop=True))

Out[29]:
   id  id_ind pay_date
0   1       1     Jul1
1   1       2     Jul2
2   2       2     Aug5
3   2       3     Aug7
4   3       1    Aug22