2017-10-18 41 views
5

W Pandonie Pythona, chcę dodać kolumny, wykonując wiele funkcji agregujących na wielu kolumnach, takich jak R dplyr mutate_each. Na przykład, czy Pandy Pythona mogą realizować to samo przetwarzanie, co następujący skrypt R?W Pandonie Pythona, jak używać jak R dplyr mutate_each

R dplyr : 

iris %>% 
    group_by(Species) %>% 
    mutate_each(funs(min, max, mean), starts_with("Sepal")) 

Jednak udało mi się osiągnąć takie samo przetwarzanie jak mutacja z Pandami. Jak pokazano w poniższym kodzie, mógłbym wykonać jedną funkcję agregującą i dodać jedną kolumnę.

R dplyr : 

iris %>% group_by(Species) %>% mutate(MaxSepalLen = max(Sepal.Length)) 

Python Pandas : 

iris.assign(MaxSepalLen = iris.groupby("Species")["Sepal.Length"].transform('max')) 

Odpowiedz

0

Z pandami można to osiągnąć w bardziej długiej drodze.

Najpierw przygotować dane:

import pandas as pd 
import numpy as np 
from sklearn.datasets import load_iris 
iris_data = load_iris() 
iris = pd.DataFrame(iris_data.data, columns = [c[0:3] + c[6] for c in iris_data.feature_names]) 
iris['Species'] = iris_data.target_names[iris_data.target] 

Teraz możemy naśladowania mutate_each rurociągu:

# calculate the aggregates 
pivot = iris.groupby("Species")[iris.columns[iris.columns.str.startswith('sepal')] 
           ].aggregate(['min', 'max', np.mean]) 
# name the aggregates 
pivot.columns = pivot.columns.get_level_values(0) + pivot.columns.get_level_values(1) 
# merge aggregates with the original dataframe 
new_iris = iris.merge(pivot, left_on='Species', right_index=True) 

tabela pivot jest naprawdę mały stolik obrotowy:

  seplmin seplmax seplmean sepwmin sepwmax sepwmean 
Species               
setosa   4.3  5.8  5.006  2.3  4.4  3.418 
versicolor  4.9  7.0  5.936  2.0  3.4  2.770 
virginica  4.9  7.9  6.588  2.2  3.8  2.974 

I new_iris to tabela 150x11 ze wszystkimi kolumnami z iris i pivot połączone, identyczne jak wyjścia dplyr.

+0

Dziękuję za odpowiedź. Sprawdzę to. – user0471959328

Powiązane problemy