在Python Pandas中,如何使用像R dplyr mutate_each

时间:2017-10-18 04:55:47

标签: 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"))

然而,我能够实现与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'))

2 个答案:

答案 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的表,其中irispivot的所有列都合并在一起,与dplyr输出相同。

答案 1 :(得分:0)

mutate_eachmutateacross 取代。

你可以在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 软件包的作者。