ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame のグループ内の上位 N レコードを効率的に取得するにはどうすればよいですか?

Pandas DataFrame のグループ内の上位 N レコードを効率的に取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-05 13:24:12984ブラウズ

How Can I Efficiently Retrieve the Top N Records Within Groups in a Pandas DataFrame?

Pandas: グループ内の上位レコードの効率的な取得

pandas DataFrame の特定の列の各個別の値内の上位 2 つのレコードを取得するタスクを考えてみましょう。例として、次の DataFrame について考えてみましょう:

df = pd.DataFrame({'id':[1,1,1,2,2,2,2,3,4], 'value':[1,2,3,1,2,3,4,1,1]})

従来、目的の列でグループ化した後、各グループ内のレコードに番号を付けることで、この問題に対処できます。

dfN = df.groupby('id').apply(lambda x:x['value'].reset_index()).reset_index()

ただし、より効率的で洗練されたアプローチは、pandas の head 関数を活用することです。

df.groupby('id').head(2)

これは、各グループの上位 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

MultiIndex を削除して結果を平坦化するには:

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

以上がPandas DataFrame のグループ内の上位 N レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。