首页 > 解决方案 > 通过保留第 n 个最大值来减少 pandas 数据帧

问题描述

假设我有以下数据框:

id1    dt                   id2   count
0      2010-02-06 07:21:45  id0   78
0      2010-02-06 07:21:45  id1   79
0      2010-02-06 07:21:45  id2   80
0      2010-02-06 07:21:45  id3   69
0      2010-02-06 07:58:25  id4   58
1      2010-02-06 07:58:25  id0   67

我想为每个“dt”保留由较高“计数”选择的第 n 个最多的“id2”。因此,对于 nth=3,获得:

id1    dt                   id2   count
0      2010-02-06 07:21:45  id0   78
0      2010-02-06 07:21:45  id1   79
0      2010-02-06 07:21:45  id2   80
0      2010-02-06 07:58:25  id4   58
1      2010-02-06 07:58:25  id0   67

它还应该检测到多个“id2”。因此,如果输入是:

id1    dt                   id2   count
0      2010-02-06 07:21:45  id0   78
0      2010-02-06 07:21:45  id1   79
0      2010-02-06 07:21:45  id2   80
0      2010-02-06 07:21:45  id2   79
0      2010-02-06 07:21:45  id3   69
0      2010-02-06 07:58:25  id4   58
1      2010-02-06 07:58:25  id0   67

它必须返回 nth=3

id1    dt                   id2   count
0      2010-02-06 07:21:45  id0   78
0      2010-02-06 07:21:45  id1   79
0      2010-02-06 07:21:45  id2   80
0      2010-02-06 07:58:25  id4   58
1      2010-02-06 07:58:25  id0   67

标签: pandas

解决方案


这应该有效:

df = df.sort_values("count", ascending=False).groupby(["dt", "id2"], as_index=False).first()
df = df.groupby("dt").apply(lambda x: x.iloc[0:3]).reset_index(drop=True)

推荐阅读