2017-10-18 17 views
5

Trong Python Pandas, tôi muốn thêm các cột bằng cách thực hiện nhiều hàm tổng hợp trên nhiều cột như R dplyr mutate_each. Ví dụ: Can Python Pandas có thể xử lý giống như tập lệnh R sau không?Trong Python Pandas, cách sử dụng như R dplyr mutate_each

R dplyr : 

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

Tuy nhiên, tôi đã có thể đạt được quá trình xử lý giống như đột biến với gấu trúc. Như được hiển thị trong mã bên dưới, tôi có thể thực thi một hàm tổng hợp và thêm một cột.

R dplyr : 

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

Python Pandas : 

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

Trả lời

0

Với gấu trúc, điều này có thể được thực hiện một cách leng keng hơn.

Đầu tiên, chúng ta hãy chuẩn bị dữ liệu:

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] 

Bây giờ chúng ta có thể bắt chước các mutate_each đường ống:

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

Bảng pivot thực sự là một bảng pivot nhỏ:

  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 

new_iris là một bảng 150x11 với tất cả các cột từ irispivot được kết hợp, giống với kết quả đầu ra dplyr.

+0

Cảm ơn bạn đã trả lời. Tôi sẽ kiểm tra. – user0471959328

Các vấn đề liên quan