0

これが私の 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 と同じ形式の最終結果セットが必要なことです。

ご協力いただきありがとうございます。

4

1 に答える 1