Pandy: jak używać funkcji mutate() odpowiadającej r


W języku programowania R możemy skorzystać z funkcji mutate() z pakietu dplyr , aby szybko dodać nowe kolumny do ramki danych obliczonej z istniejących kolumn.

Na przykład poniższy kod pokazuje, jak obliczyć średnią wartość określonej kolumny w języku R i dodać tę wartość jako nową kolumnę w ramce danych:

 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

Odpowiednikiem funkcji mutate() w pandach jest funkcja transform() .

Poniższy przykład pokazuje, jak w praktyce wykorzystać tę funkcję.

Przykład: użycie transform() w pandach do replikacji mutate() w R

Załóżmy, że mamy następującą ramkę danych pand, która pokazuje punkty zdobyte przez koszykarzy z różnych drużyn:

 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

Możemy użyć funkcji transform() , aby dodać nową kolumnę o nazwie Mean_points , która pokazuje średnią punktów zdobytych przez każdą drużynę:

 #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

Średnia wartość punktowa zawodników Drużyny A wyniosła 21,25 , a średnia wartość punktowa zawodników Drużyny B wyniosła 18,25 , zatem wartości te przypisano odpowiednio każdemu zawodnikowi w nowej kolumnie.

Należy zauważyć, że odpowiada to wynikom uzyskanym przy użyciu funkcji mutate() w przykładzie wprowadzającym.

Warto zauważyć, że lambdy można także używać do wykonywania niestandardowych obliczeń w funkcji transform() .

Na przykład poniższy kod pokazuje, jak używać lambdy do obliczenia procentu wszystkich punktów zdobytych przez każdego gracza w odpowiedniej drużynie:

 #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

Oto jak zinterpretować wynik:

  • Pierwszy zawodnik drużyny A zdobył 30 punktów na 85 możliwych wśród zawodników drużyny A. Zatem jego procent wszystkich zdobytych punktów wyniósł 30/85 = 0,352941 .
  • Drugi zawodnik Drużyny A zdobył 22 punkty na 85 możliwych wśród zawodników Drużyny A. Zatem jego procent wszystkich zdobytych punktów wyniósł 22/85 = 0,258824 .

I tak dalej.

Pamiętaj, że możemy użyć argumentu lambda w funkcji transform() , aby wykonać dowolne niestandardowe obliczenia.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje na pandach:

Jak wykonać sumę GroupBy w Pandach
Jak korzystać z Groupby i Plot w Pandach
Jak liczyć unikalne wartości za pomocą GroupBy w Pandach

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *