ホームページ >バックエンド開発 >Python チュートリアル >Pandas GroupBy 操作で最大数の行を見つける方法
Pandas グループで最大数の行を取得する
問題:
行を識別する方法複数でグループ化する場合、pandas DataFrame の「count」列の最大値を持つcolumns?
解決策:
ステップ 1: 各グループの最大数を見つける
各グループの最大数を決定するにはグループ化するには、groupby() 関数と max() 関数を使用します。
max_counts = df.groupby(['Sp', 'Mt'])['count'].max()
これにより、各グループの最大数を含むシリーズ。
ステップ 2: 最大数の行を特定する
元のデータフレームで最大数の行のインデックスを取得するには、transform() メソッドを使用します:
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count']
これにより、True が最大値を持つ行を示すブール値の Series が作成されます。 count.
ステップ 3: 最大数に基づいて行をフィルタリングします
最後に、ブール型インデックスを使用して DataFrame をフィルタリングし、最大数の行のみを選択します。
result = df[idx]
これにより、各データフレーム内の「count」列の最大値を持つ行のみを含む新しい DataFrame が返されます。 group.
例:
例 1:
df = pd.DataFrame({ 'Sp': ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4', 'MM4'], 'Mt': ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'], 'Value': ['a', 'n', 'cb', 'mk', 'bg', 'dgd', 'rd', 'cb', 'uyi'], 'count': [3, 2, 5, 8, 10, 1, 2, 2, 7] })
出力:
Sp Mt Value count 0 MM1 S1 a 3 2 MM1 S3 cb 5 3 MM2 S3 mk 8 4 MM2 S4 bg 10 8 MM4 S2 uyi 7
例2:
df = pd.DataFrame({ 'Sp': ['MM2', 'MM2', 'MM4', 'MM4', 'MM4'], 'Mt': ['S4', 'S4', 'S2', 'S2', 'S2'], 'Value': ['bg', 'dgd', 'rd', 'cb', 'uyi'], 'count': [10, 1, 2, 8, 8] })
出力:
Sp Mt Value count 4 MM2 S4 bg 10 7 MM4 S2 cb 8 8 MM4 S2 uyi 8
注: グループ内の複数の行が最大数を持つ場合、これらの行はすべて返されます。
以上がPandas GroupBy 操作で最大数の行を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。