パンダ: r と同等の mutate() 関数の使用方法
R プログラミング言語では、 dplyrパッケージのmutate()関数を使用して、既存の列から計算されたデータのフレームに新しい列をすばやく追加できます。
たとえば、次のコードは、R の特定の列の平均値を計算し、その値を新しい列としてデータ フレームに追加する方法を示しています。
library (dplyr) #create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(30, 22, 19, 14, 14, 11, 20, 28)) #add new column that shows mean points by team df <- df %>% group_by(team) %>% mutate(mean_points = mean(points)) #view updated data frame df team points mean_points 1 to 30 21.2 2 A 22 21.2 3 A 19 21.2 4 A 14 21.2 5 B 14 18.2 6 B 11 18.2 7 B 20 18.2 8 B 28 18.2
pandas のmutate()関数に相当するのは、transform()関数です。
次の例は、この関数を実際に使用する方法を示しています。
例: pandas で transform() を使用して R で mutate() を複製する
さまざまなチームのバスケットボール選手が獲得したポイントを示す次のパンダ データフレームがあるとします。
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' points ': [30, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print (df) team points 0 to 30 1 to 22 2 to 19 3 to 14 4 B 14 5 B 11 6 B 20 7 B 28
transform()関数を使用して、各チームが獲得した平均ポイントを示すMean_pointsという新しい列を追加できます。
#add new column to DataFrame that shows mean points by team df[' mean_points '] = df. groupby (' team ')[' points ']. transform (' mean ') #view updated DataFrame print (df) team points mean_points 0 to 30 21.25 1 to 22 21.25 2 A 19 21.25 3 to 14 21.25 4 B 14 18.25 5 B 11 18.25 6 B 20 18.25 7 B 28 18.25
チーム A のプレーヤーの平均ポイント値は21.25 、チーム B のプレーヤーの平均ポイント値は18.25でした。したがって、これらの値は新しい列の各プレーヤーに割り当てられました。
これは、導入例のmutate()関数を使用して取得された結果と一致することに注意してください。
ラムダを使用して、 transform()関数でカスタム計算を実行することもできることに注意してください。
たとえば、次のコードは、ラムダを使用して、それぞれのチームの各プレーヤーが獲得した合計ポイントの割合を計算する方法を示しています。
#create new column called percent_of_points
df[' percent_of_points '] = df. groupby (' team ')[' points ']. transform ( lambda x:x/ x.sum ())
#view updated DataFrame
print (df)
team points percent_of_points
0 A 30 0.352941
1 A 22 0.258824
2 A 19 0.223529
3 A 14 0.164706
4 B 14 0.191781
5 B 11 0.150685
6 B 20 0.273973
7 B 28 0.383562
結果を解釈する方法は次のとおりです。
- チーム A の最初のプレーヤーは、チーム A のプレーヤーの合計 85 点のうち 30 点を獲得しました。したがって、獲得した総得点に占める彼の割合は 30/85 = 0.352941となりました。
- チーム A の 2 番目のプレーヤーは、チーム A のプレーヤーの合計 85 点のうち 22 点を獲得しました。したがって、得点した総得点に占める彼の割合は 22/85 = 0.258824となりました。
等々。
必要なカスタム計算を実行するには、 transform()関数でラムダ引数を使用できることに注意してください。
追加リソース
次のチュートリアルでは、パンダで他の一般的な操作を実行する方法を説明します。
Pandas で GroupBy 合計を実行する方法
Pandas で Groupby と Plot を使用する方法
Pandas で GroupBy を使用して一意の値をカウントする方法