use*_*328 5 python r pandas dplyr
在Python Pandas中,我想通过在多个列上执行多个聚合函数来添加列,如R dplyr mutate_each.例如,Python Pandas可以实现与以下R脚本相同的处理吗?
R dplyr :
iris %>%
group_by(Species) %>%
mutate_each(funs(min, max, mean), starts_with("Sepal"))
Run Code Online (Sandbox Code Playgroud)
但是,我能够实现与Pandas mutate相同的处理.如下面的代码所示,我可以执行一个聚合函数并添加一列.
R dplyr :
iris %>% group_by(Species) %>% mutate(MaxSepalLen = max(Sepal.Length))
Python Pandas :
iris.assign(MaxSepalLen = iris.groupby("Species")["Sepal.Length"].transform('max'))
Run Code Online (Sandbox Code Playgroud)
有了 Pandas,这可以通过更长时间的方式来完成。
首先,我们准备一下数据:
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]
Run Code Online (Sandbox Code Playgroud)
现在我们可以模仿mutate_each管道:
# 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)
Run Code Online (Sandbox Code Playgroud)
该pivot表实际上是一个小型数据透视表:
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
Run Code Online (Sandbox Code Playgroud)
这new_iris是一个 150x11 的表,其中包含来自iris和pivot组合的所有列,与输出相同dplyr。
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |