【发布时间】:2020-11-20 12:01:32
【问题描述】:
请看pandas 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]})
【问题讨论】:
-
是的,它返回每个组中最大的两个,在这种情况下是所有记录。你想要的输出是什么?
-
不行,看看'id'==2,那个组里有3条记录。
-
是的....但是您按
id分组和pay_date,所以有3个不同的组id == 2 -
好吧,那是有道理的。那我如何得到我想要的输出呢?我想要的是对'id'进行分组并取2个最大的'id_ind'。但我也想在新的 df 中包含“pay_date”。
-
我想要的输出:pd.DataFrame({'id': [1, 1, 2, 2, 3], 'pay_date': ['Jul1', 'Jul2', 'Aug5', 'Aug7', 'Aug22'], 'id_ind': [1, 2, 2, 3, 1]}) 请参阅更新的 OP。
标签: python python-3.x pandas lambda pandas-groupby