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
我有以下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()
.
然后使用 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