2017-10-18 8 views
5

Python Pandasでは、R dplyr mutate_eachのように複数の集約関数を実行して列を追加したいと考えています。 たとえば、Python Pandasは次のRスクリプトと同じ処理を実現できますか?Python Pandasで、R dplyr mutate_eachの使い方

R dplyr : 

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

しかし、私はパンダで突然変異と同じ処理を達成することができました。 以下のコードに示すように、私は1つの集計関数を実行して1つの列を追加することができました。

R dplyr : 

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

Python Pandas : 

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

答えて

0

パンダを使用すると、これはもっと長めの方法で行うことができます。

まずは、データを準備しましょう:pivotテーブルは本当に小さなピボットテーブルで

# 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) 

  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 

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] 

今、私たちはmutate_eachパイプラインを模倣することができますnew_irisは、すべての列がから150x11の表ですおよびpivotは、dplyrが出力するものと同じです。

+0

ご返信ありがとうございます。私はそれをチェックします。 – user0471959328