2 回答

TA贡献1864条经验 获得超6个赞
你试过了吗 df.groupby('id').head(2)
产生的输出:
>>> df.groupby('id').head(2)
id value
id
1 0 1 1
1 1 2
2 3 2 1
4 2 2
3 7 3 1
4 8 4 1
(请记住,您可能需要先订购/排序,具体取决于您的数据)
编辑:正如提问者所提到的,用于df.groupby('id').head(2).reset_index(drop=True)删除多索引并展平结果。
>>> df.groupby('id').head(2).reset_index(drop=True)
id value
0 1 1
1 1 2
2 2 1
3 2 2
4 3 1
5 4 1

TA贡献1780条经验 获得超5个赞
由于0.14.1,你现在可以做的nlargest和nsmallest一个上groupby对象:
In [23]: df.groupby('id')['value'].nlargest(2)
Out[23]:
id
1 2 3
1 2
2 6 4
5 3
3 7 1
4 8 1
dtype: int64
还有,你在那里得到的原始索引以及轻微的怪事,但根据您的原始索引是什么,这可能是真正有用的是。
如果你对它不感兴趣,你可以.reset_index(level=1, drop=True)完全摆脱它。
(注意:从0.17.1开始,你也可以在DataFrameGroupBy上执行此操作,但现在它只适用于Series和SeriesGroupBy。)
添加回答
举报