gpt4 book ai didi

python - 在 Python Pandas 中,如何像 R dplyr mutate_each 一样使用

转载 作者:太空狗 更新时间:2023-10-30 01:32:00 24 4
gpt4 key购买 nike

在 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'))

最佳答案

使用 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]

现在我们可以模仿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 相同> 输出。

关于python - 在 Python Pandas 中,如何像 R dplyr mutate_each 一样使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com