Pandas Dataframe 保留最近发生的事件

Pandas Dataframe keep the most recent incidence

我有以下df,我想保留最近发生的ID。事件范围从 1 - 3。1 是最近的,3 是最少的。

ID Incident
001 1
001 2
001 3
002 1
002 1
002 1
002 1
002 3
A003 2
A003 2
A003 3

输出

ID Incident
001 1
002 1
002 1
002 1
002 1
A003 2
A003 2

您可以先根据您的 ID 对数据集进行分组,然后使用 groupby()min().

select 每个组的最小值

然后使用 merge 将此结果与原始数据框连接起来,并将参数 indicator 设置为 True,这将显示哪些行属于最小值。

最后一步是使用 loc 过滤您的数据框,您会得到答案:

m = df.groupby('ID',as_index=False).agg({'Incident':'min'})
out = df.loc[pd.merge(df,m,how='left',indicator=True)._merge.eq('both')]

回印:

print(out)

     ID  Incident
0     1         1
3     2         1
4     2         1
5     2         1
6     2         1
8  A003         2
9  A003         2