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也存在,可能更简洁、更高效