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 .
  • Второй игрок Команды А набрал 22 очка из 85, набранных среди игроков Команды А. Таким образом, его процент от общего числа набранных очков составил 22/85 = 0,258824 .

И так далее.

Обратите внимание, что мы можем использовать аргумент лямбда в функции Transform() для выполнения любых пользовательских вычислений.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как выполнить сумму GroupBy в Pandas
Как использовать Groupby и Plot в Pandas
Как посчитать уникальные значения с помощью GroupBy в Pandas

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *