Pandas 通过保持第n个最大值减少数据帧

Pandas 通过保持第n个最大值减少数据帧,pandas,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

假设我有以下数据框:

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。 因此,对于n=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
它必须在n=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
这应该起作用:

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)

你好非常感谢。几乎正是我想要的。我必须做d.sort_值'count',升序=False。groupby['dt',id1',id2']。首先。reset_indexdrop=False。sort_值'count',升序=False。groupby['dt',id1'].nth[0,1,2]。reset_indexdrop=False。注意,nth比apply快得多。噢,cool-nlargest也存在,可能更简洁、更高效