パンダ: 複数の列をグループ化して集計する方法


多くの場合、pandas DataFrame の複数の列をグループ化して集約することが必要な場合があります。

幸いなことに、これは pandas の.groupby()関数と.agg()関数を使用して簡単に実行できます。

このチュートリアルでは、これらの機能の実際の使用例をいくつか説明します。

例 1: 2 つの列でグループ化し、平均を求める

次のパンダ データフレームがあるとします。

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

#view DataFrame
print (df)

  team position assists rebounds
0 AG 5 11
1 BG 7 8
2 BF 7 10
3 BG 8 6
4 BF 5 6
5 MF 7 9
6 MC 6 6
7 MC 9 10

次のコードは、「チーム」列と「ポジション」列でグループ化し、平均パスを見つける方法を示しています。

 df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()


        team position assists
                          mean
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

出力からは次のことがわかります。

  • チーム A のポジション G の選手の平均アシストは5.0です。
  • チーム B のポジション F の選手の平均アシストは6.0です。
  • チーム B のポジション G の選手の平均アシスト数は7.5です。

等々。

次のコードを使用して、結果の DataFrame の列の名前を変更することもできます。

 #group by team and position and find mean assists
new = df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()

#rename columns
new.columns = ['team', 'pos', 'mean_assists']

#view DataFrame
print (new)

	team pos mean_assists
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

例 2: 2 つの列でグループ化し、複数の統計を検索します。

前の例と同じ pandas DataFrame を使用していると仮定しましょう。

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

次のコードは、「チーム」列と「ポジション」列にグループ化されたリバウンド数の中央値と最大数を見つける方法を示しています。

 df. groupby (['team', 'position']). agg ({'rebounds': ['median', 'max']}). reset_index ()


        team position rebounds
                         median max
0 A G 11 11
1 B F 8 10
2 B G 7 8
3 M C 8 10
4 M F 9 9

出力からは次のことがわかります。

  • チーム A の G ポジションの選手のリバウンドの中央値は11です。
  • チーム A のポジション G のプレーヤーの最大リバウンドは11です。
  • チーム B のポジション F の選手のリバウンドの中央値は8です。
  • チーム B のポジション F のプレーヤーの最大リバウンドは10です。

等々。

追加リソース

複数の条件で Pandas DataFrame をフィルタリングする方法
Pandas DataFrame の欠損値を数える方法
複数の Pandas DataFrame をスタックする方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です