Groupby データと最大カウント値を持つ行の取得
グループ内の最大カウント値を持つ行を決定するには、groupby 操作を使用できます。 pandas DataFrame.
次のことを考慮してください。 DataFrame:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S1 | n | 2 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM2 | S4 | dgd | 1 |
MM4 | S2 | rd | 2 |
MM4 | S2 | cb | 2 |
MM4 | S2 | uyi | 7 |
例 1:
私たちの目標は、各グループ (['Sp', 'Mt'] で定義) 内の行を識別することです。最大のカウント値。例 1 では、次のような出力が期待されます:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM4 | S2 | uyi | 7 |
これを達成するには、まず各グループの最大カウント値を取得します:
df.groupby(['Sp', 'Mt'])['count'].max()
これにより、次の結果が生成されます:
Sp | Mt | |
---|---|---|
MM1 | S1 | 3 |
MM1 | S3 | 5 |
MM2 | S3 | 8 |
MM2 | S4 | 10 |
MM4 | S2 | 7 |
次に、カウント値が各データフレーム内の最大値に等しい元の DataFrame のインデックスを抽出します。 group:
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count'] df[idx]
これにより、目的の出力が得られます。
例 2:
例 2 では、期待される出力は次のとおりです。
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
このシナリオでは、MM4 グループ内に最大数の行が複数あります。値(8)。前と同じアプローチを使用して、両方の行を取得します:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
更新:
各グループ内の最大カウント値を示す新しい列を DataFrame に追加することが目標の場合、transform メソッドを使用して各グループの値を計算できます。 row:
df.groupby(['Sp', 'Mt'])['count'].max()
これにより、count_max 列を含む DataFrame が生成され、各列の最大カウント値が含まれます。グループ:
Sp | Mt | Value | count | count_max |
---|---|---|---|---|
MM1 | S1 | a | 3 | 3 |
MM1 | S1 | n | 2 | 3 |
MM1 | S3 | cb | 5 | 5 |
MM2 | S3 | mk | 8 | 8 |
MM2 | S4 | bg | 10 | 10 |
MM2 | S4 | dgd | 1 | 10 |
MM4 | S2 | rd | 2 | 7 |
MM4 | S2 | cb | 2 | 7 |
MM4 | S2 | uyi | 7 | 7 |
以上がPandas のグループ内で最大カウント値を持つ行を検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。