gpt4 book ai didi

Python pandas 对多列执行相同的聚合

转载 作者:行者123 更新时间:2023-12-04 10:48:15 24 4
gpt4 key购买 nike

我知道在 Pandas 中,我可以做这样的事情,我将多个聚合应用于 同列 :

import pandas as pd
df = pd.DataFrame({'id':[1,1,2,2], 'x1':[0,1,0,1], 'x2':[1,0,1,0],'x3':[0,1,0,1], 'x4':[1,0,1,0]})
df.groupby('id').agg({'x1':['sum', 'max'], 'x2':['sum','max']})

有没有语法快捷方式来做类似的事情,除了这次应用 相同的聚合 多列?但是,我也希望执行不止一种类型的聚合。

有效的语法示例
df.groupby('id').agg({'x1':sum, 'x2':sum, 'x3':mean, 'x4':mean})

预期结果示例
df.groupby('id').agg({['x1', 'x2']:sum, ['x3', 'x4']:mean})

我知道这不是一个有效的键值对,但希望能说明我的目标。至于我为什么要这样做,我当前的聚合声明越来越长,我正在寻找缩短它的方法。

最佳答案

如果要使用 list在字典的键中它在 python 中无效。

关闭,您需要的是在 groupby 之后指定列,但它只适用于一个聚合函数:

df.groupby('id')['x1', 'x2'].sum()

或者:
df.groupby('id')['x1', 'x2'].agg('sum')

如果想要一些更动态的解决方案,一个是创建元组字典然后展平值,只需要元组中唯一的所有值,因为 dict 根据定义具有唯一键:
d = {('x1', 'x2'):['sum','max'], ('x3', 'x4'):'mean'}
d1 = {x:v for k, v in d.items() for x in k}
print (d1)
{'x1': ['sum', 'max'], 'x2': ['sum', 'max'], 'x3': 'mean', 'x4': 'mean'}

print (df.groupby('id').agg(d1))
x1 x2 x3 x4
sum max sum max mean mean
id
1 1 1 1 1 0.5 0.5
2 1 1 1 1 0.5 0.5

关于Python pandas 对多列执行相同的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59602364/

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