Pandas: 2 つの列をグループ化して集計する方法


pandas のgroupby()関数で次の基本構文を使用すると、2 つの列でグループ化し、別の列を集計できます。

 df. groupby ([' var1 ',' var2 '])[' var3 ']. mean ()

この特定の例では、DataFrame を列var1var2でグループ化し、列var3の平均を計算します。

次の例は、次の pandas DataFrame を使用して 2 つの列でグループ化し、集計する方法を示しています。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'F', 'F', 'G', 'G', 'G', 'G', 'F'],
                   ' points ': [15, 22, 24, 25, 20, 35, 34, 19, 14, 12]})

#view DataFrame
print (df)

  team position points
0 AG 15
1 AG 22
2 AF 24
3 AF 25
4 AF 20
5 BG 35
6 BG 34
7 BG 19
8 BG 14
9 BF 12

例 1: 2 つの列をグループ化し、別の列の平均を計算する

次の構文を使用して、チーム列ポジション列ごとにグループ化されたポイント列の平均値を計算できます。

 #calculate mean of points grouped by team and position columns
df. groupby ([' team ', ' position '])[' points ']. mean ()

team position
AF23.0
      G 18.5
BF 12.0
      G 25.5
Name: points, dtype: float64

結果から次のことがわかります。

  • チーム A のポジション F の選手の平均ポイント値は23です。
  • チーム A のポジション G の選手の平均ポイント値は18.5です。

等々。

例 2: 2 つの列をグループ化し、別の列の最大値を計算する

次の構文を使用して、チーム列ポジション列ごとにグループ化されたポイント列の最大値を計算できます。

 #calculate max of points grouped by team and position columns
df. groupby ([' team ', ' position '])[' points ']. max ()

team position
AF25
      G22
BF 12
      G 35
Name: points, dtype: int64

結果から次のことがわかります。

  • チーム A のポジション F のプレーヤーの最大ポイント値は25です。
  • チーム A のポジション G のプレーヤーの最大ポイント値は22です。

等々。

例 3: 2 つの列ごとにグループ化し、出現回数をカウントする

次の構文を使用して、チーム列ポジション列の各組み合わせの出現をカウントできます。

 #count occurrences of each combination of team and position columns
df. groupby ([' team ', ' position ']). size ()

team position
AF3
      G2
BF 1
      G4
dtype: int64

結果から次のことがわかります。

  • チームAのポジションFには3人の選手がいます。
  • チーム A のポジション G には2 人のプレーヤーがいます。

等々。

追加リソース

次のチュートリアルでは、パンダで他の一般的なタスクを実行する方法を説明します。

Pandas GroupBy を使用して一意の値をカウントする方法
Pandas Groupby に関数を適用する方法
Pandas GroupBy から棒グラフを作成する方法

コメントを追加する

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