如果这是我的熊猫数据框:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['comp1', 'comp2'] * 9,
'B': ['user1', 'user2','user3'] * 6,
'C': rand.randn(18)})
A B C
0 comp1 user1 1.624345
1 comp2 user2 -0.611756
2 comp1 user3 -0.528172
3 comp2 user1 -1.072969
4 comp1 user2 0.865408
5 comp2 user3 -2.301539
6 comp1 user1 1.744812
7 comp2 user2 -0.761207
8 comp1 user3 0.319039
9 comp2 user1 -0.249370
10 comp1 user2 1.462108
11 comp2 user3 -2.060141
12 comp1 user1 -0.322417
13 comp2 user2 -0.384054
14 comp1 user3 1.133769
15 comp2 user1 -1.099891
16 comp1 user2 -0.172428
17 comp2 user3 -0.877858
我想运行一个 pandas 命令来返回相同形式的结果集,但只显示 A 和 B 的每个组合的 C 的两个最大值。
我知道我可以使用以下命令按 A 和 B 升序排序,然后按 C 降序排序:
df.sort_index(by = ['A','B','C'],ascending=[True,True,False])
然后我想我需要使用 groupby 只显示 C 的两个最大值。我能得到的最接近的是使用 first() 和 last() 显示最大值和最小值
df.sort_index(by = ['A','B','C'],ascending=[True,True,False]).groupby(['A','B']).first()
df.sort_index(by = ['A','B','C'],ascending=[True,True,False]).groupby(['A','B']).last()
问题是我追求的是最大的 2(或者一般来说,最大的 x)加上我想要与原始 DataFrame 相同形式的最终结果集。
感谢您对此的帮助。