Pandas groupby に関数を適用する方法
次の基本構文を使用して、pandas DataFrame でgroupby()関数とapply()関数を一緒に使用できます。
df. groupby (' var1 '). apply ( lambda x: some function)
次の例は、実際に次の pandas DataFrame でこの構文を使用する方法を示しています。
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'B'], ' points_for ': [18, 22, 19, 14, 11, 20, 28], ' points_against ': [14, 21, 19, 14, 12, 20, 21]}) #view DataFrame print (df) team points_for points_against 0 to 18 14 1 To 22 21 2 A 19 19 3 B 14 14 4 B 11 12 5 B 20 20 6 B 28 21
例 1: groupby() と apply() を使用して相対頻度を見つける
次のコードは、 groupby( ) 関数とapply()関数を使用して、pandas DataFrame 内の各チーム名の相対頻度を見つける方法を示しています。
#find relative frequency of each team name in DataFrame
df. groupby (' team '). apply ( lambda x:x[' team ']. count ()/ df.shape [0])
team
A 0.428571
B 0.571429
dtype:float64
結果から、チーム A は全行の 42.85% に出現し、チーム B は全行の 57.14% に出現することがわかります。
例 2: groupby() と apply() を使用して最大値を見つける
次のコードは、 groupby( ) 関数とapply()関数を使用して、各チームの最大の「points_for」値を見つける方法を示しています。
#find max "points_for" values for each team
df. groupby (' team '). apply ( lambda x:x[' points_for ']. max ())
team
At 22
B28
dtype: int64
結果から、チーム A の最大得点は 22、チーム B の最大得点は 28 であることがわかります。
例 3: groupby() と apply() を使用してカスタム計算を実行する
次のコードは、 groupby( ) 関数とapply()関数を使用して、各チームの「points_for」と「points_against」の平均差を見つける方法を示しています。
#find max "points_for" values for each team
df. groupby (' team '). apply ( lambda x: (x[' points_for '] - x[' points_against ']). mean ())
team
A 1.666667
B 1.500000
dtype:float64
結果から、「賛成点」と「反対点」の平均差は、チーム A が1.67 、チーム B が1.50であることがわかります。
追加リソース
次のチュートリアルでは、パンダで他の一般的な操作を実行する方法を説明します。
Pandas で GroupBy 合計を実行する方法
Pandas で Groupby と Plot を使用する方法
Pandas で GroupBy を使用して一意の値をカウントする方法