Pandas: 2 つの列をグループ化して集計する方法
pandas のgroupby()関数で次の基本構文を使用すると、2 つの列でグループ化し、別の列を集計できます。
df. groupby ([' var1 ',' var2 '])[' var3 ']. mean ()
この特定の例では、DataFrame を列var1とvar2でグループ化し、列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 から棒グラフを作成する方法