在Python Pandas中,我想通过在多个列上执行多个聚合函数来添加列,例如R dplyr mutate_each。 例如,Python Pandas可以实现与以下R脚本相同的处理吗?
R dplyr :
iris %>%
group_by(Species) %>%
mutate_each(funs(min, max, mean), starts_with("Sepal"))
然而,我能够实现与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'))
答案 0 :(得分:1)
对于熊猫来说,这可以用更长的方式来完成。
首先,让我们准备数据:
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
管道:
# 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)
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
new_iris
是一个150x11的表,其中iris
和pivot
的所有列都合并在一起,与dplyr
输出相同。
答案 1 :(得分:0)
mutate_each
被 mutate
和 across
取代。
你可以在python中试试这个:
>>> from datar.all import f, group_by, starts_with, mutate, across, max, min, mean
>>> from datar.datasets import iris
>>>
>>> iris >> \
... group_by(f.Species) >> \
... mutate(across(starts_with("Sepal"), [min, max, mean]))
Sepal_Length Sepal_Width Petal_Length Petal_Width Species Sepal_Length_1 Sepal_Length_2 Sepal_Length_3 Sepal_Width_1 Sepal_Width_2 Sepal_Width_3
<float64> <float64> <float64> <float64> <object> <float64> <float64> <float64> <float64> <float64> <float64>
0 5.1 3.5 1.4 0.2 setosa 4.3 5.8 5.006 2.3 4.4 3.428
1 4.9 3.0 1.4 0.2 setosa 4.3 5.8 5.006 2.3 4.4 3.428
2 4.7 3.2 1.3 0.2 setosa 4.3 5.8 5.006 2.3 4.4 3.428
3 4.6 3.1 1.5 0.2 setosa 4.3 5.8 5.006 2.3 4.4 3.428
.. ... ... ... ... ... ... ... ... ... ... ...
4 5.0 3.6 1.4 0.2 setosa 4.3 5.8 5.006 2.3 4.4 3.428
145 6.7 3.0 5.2 2.3 virginica 4.9 7.9 6.588 2.2 3.8 2.974
146 6.3 2.5 5.0 1.9 virginica 4.9 7.9 6.588 2.2 3.8 2.974
147 6.5 3.0 5.2 2.0 virginica 4.9 7.9 6.588 2.2 3.8 2.974
148 6.2 3.4 5.4 2.3 virginica 4.9 7.9 6.588 2.2 3.8 2.974
149 5.9 3.0 5.1 1.8 virginica 4.9 7.9 6.588 2.2 3.8 2.974
[Groups: Species (n=3)]
[150 rows x 11 columns]
我是 datar
软件包的作者。