複数の列がインデックスとして設定されているデータフレームから一番上の行を取得するにはどうすればよいですか?

エヴァン・ブリテン

インデックスとして設定された2つの列「sp」と「bg」を持ち、「スコア」でソートされたデータフレームがあります。データフレームの「sp」値ごとに上位2行を取得したい

df = pd.DataFrame([
    {'sp': 'A', 'bg': 'a', 'score': 1234},
    {'sp': 'A', 'bg': 'b', 'score': 123},
    {'sp': 'A', 'bg': 'c', 'score': 12},
    {'sp': 'A', 'bg': 'd', 'score': 1},
    {'sp': 'B', 'bg': 'a', 'score': 234},
    {'sp': 'B', 'bg': 'b', 'score': 23},
    {'sp': 'C', 'bg': 'a', 'score': 345},
    {'sp': 'C', 'bg': 'b', 'score': 34},
    {'sp': 'C', 'bg': 'c', 'score': 3},
])

df.set_index(['sp', 'bg'], inplace=True)

出力はデータフレームである必要があります。

df = pd.DataFrame([
    {'sp': 'A', 'bg': 'a', 'score': 1234},
    {'sp': 'A', 'bg': 'b', 'score': 123},
    {'sp': 'B', 'bg': 'a', 'score': 234},
    {'sp': 'B', 'bg': 'b', 'score': 23},
    {'sp': 'C', 'bg': 'a', 'score': 345},
    {'sp': 'C', 'bg': 'b', 'score': 34},
])

df.set_index(['sp', 'bg'], inplace=True)
クレード

これでうまくいくはずです:

import pandas as pd

df = pd.DataFrame([
    {'sp': 'A', 'bg': 'a', 'score': 1234},
    {'sp': 'A', 'bg': 'b', 'score': 123},
    {'sp': 'A', 'bg': 'c', 'score': 12},
    {'sp': 'A', 'bg': 'd', 'score': 1},
    {'sp': 'B', 'bg': 'a', 'score': 234},
    {'sp': 'B', 'bg': 'b', 'score': 23},
    {'sp': 'C', 'bg': 'a', 'score': 345},
    {'sp': 'C', 'bg': 'b', 'score': 34},
    {'sp': 'C', 'bg': 'c', 'score': 3},
])

df.set_index(['sp', 'bg'], inplace=True)

df = pd.DataFrame(df.groupby('sp').score.nlargest(2)).droplevel(0)

print(df)

その出力は次のとおりです。

       score
sp bg       
A  a    1234
   b     123
B  a     234
   b      23
C  a     345
   b      34

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ