Pandas: як використовувати функцію mutate(), еквівалентну r
У мові програмування R ми можемо використовувати функцію mutate() із пакета dplyr , щоб швидко додати нові стовпці до кадру даних, обчисленого на основі наявних стовпців.
Наприклад, наведений нижче код показує, як обчислити середнє значення певного стовпця в 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
Еквівалентом функції mutate() у pandas є функція transform() .
У наступному прикладі показано, як використовувати цю функцію на практиці.
Приклад: використання transform() у pandas для реплікації mutate() у R
Припустимо, що у нас є наступний DataFrame pandas, який показує очки, набрані баскетболістами з різних команд:
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
Ось як інтерпретувати результат:
- Перший гравець команди А набрав 30 очок із 85 серед гравців команди А. Таким чином, його відсоток від загальної кількості набраних очок становив 30/85 = 0,352941 .
- Другий гравець команди A набрав 22 очки із загальної кількості 85 серед гравців команди A. Таким чином, його відсоток від загальної кількості набраних очок становив 22/85 = 0,258824 .
І так далі.
Зауважте, що ми можемо використовувати лямбда- аргумент у функції transform() для виконання будь-яких власних обчислень, які ми хочемо.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові операції в pandas:
Як виконати суму GroupBy у Pandas
Як використовувати Groupby та Plot у Pandas
Як підрахувати унікальні значення за допомогою GroupBy в Pandas