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

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

Mary-Kate Olsen
リリース: 2024-11-28 06:19:13
オリジナル
922 人が閲覧しました

How Can I Efficiently Extract the Top N Records from Each Group in a Pandas DataFrame?

Pandas: 各グループ内の上位レコードを効率的に抽出する

DataFrame の各グループ内の上位レコードを取得することは、データ操作の一般的なタスクです。この記事では、SQL ウィンドウ関数にヒントを得たソリューションなど、この目的を達成するための複数のアプローチを紹介します。

問題ステートメント:
グループ化列と値列を持つ DataFrame が与えられた場合、各グループの上位 n 個のレコードを抽出したいと考えています。

グループ化と行を使用した単純なアプローチ番号付け:
この問題にアプローチする 1 つの方法は、グループ化操作を適用し、その後にウィンドウ関数のようなアプローチを適用することです。これには、各グループ内の各レコードに行番号を追加し、その行番号に基づいて上位の行をフィルタリングすることが含まれます。

実際的な解決策:
より効率的な解決策には、グループ化された DataFrame の head() メソッド。デフォルトでは、head() は各グループの最初の n レコードを返します。これは、上位レコードを取得するという目的とよく一致しています。

df.groupby('id').head(2)
ログイン後にコピー

MultiIndex の削除:
グループ化操作によって導入された MultiIndex を削除するには、次を使用します。 reset_index(drop=True):

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
ログイン後にコピー

行番号付けのエレガントなアプローチ:
Python には row_number() 関数がありませんSQL の場合、groupby() とcumcount() の組み合わせを使用してその機能を複製できます。その方法は次のとおりです。

df['row_num'] = df.groupby('id').cumcount() + 1
ログイン後にコピー

このアプローチでは、追加の列やマルチインデックスを導入せずに、各グループ内に一意の行番号を割り当てます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート