これが私の pandas DataFrame の場合:
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 の 2 つの最大値のみを表示します。
これを使用して、A と B で昇順で並べ替え、次に C で降順で並べ替えることができることを知っています。
df.sort_index(by = ['A','B','C'],ascending=[True,True,False])
次に、groupby を使用して、C の 2 つの最大値のみを表示する必要があると思います。取得できる最も近いものは、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 と同じ形式の最終結果セットが必要なことです。
ご協力いただきありがとうございます。