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 サイトの他の関連記事を参照してください。