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 を使用して一意の値をカウントする方法

コメントを追加する

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