[英]Python pandas groupby agg- sum one column while getting the mean of the rest
希望根据日期对我的字段进行分组,并获得除二进制列之外的所有列的平均值,我想对其求和以获得计数。
我知道我可以通过以下方式做到这一点:
newdf=df.groupby('date').agg({'var_a': 'mean', 'var_b': 'mean', 'var_c': 'mean', 'binary_var':'sum'})
但是我想表示大约 50 列(二进制除外),我觉得必须有一种简单、更快的方法来执行此操作,而不是为所有列编写每个“列标题”:“平均值”。 我试图制作一个列名列表,但是当我把它放在 agg 函数中时,它说一个列表是一个不可散列的类型。
谢谢!
像这样的事情可能会奏效-
df = pd.DataFrame({'a':['a','a','b','b','b','b'], 'b':[10,20,30,40,20,10], 'c':[1,1,0,0,0,1]}, 'd':[20,30,10,15,34,10])
df
a b c d
0 a 10 1 20
1 a 20 1 30
2 b 30 0 10
3 b 40 0 15
4 b 20 0 34
5 b 10 1 10
假设c
是二进制变量列。 然后,
cols = [ val for val in df.columns if val != 'c']
temp = pd.concat([df.groupby(['a'])[cols].mean(), df.groupby(['a'])['c'].sum()], axis=1).reset_index()
temp
a b d c
0 a 15.0 25.00 2
1 b 25.0 17.25 1
一般来说,我会自动构建 agg dict:
sum_cols = ['binary_val']
agg_dict = {col: 'sum' if col in sum_cols else 'mean'
for col in df.columns if col != 'date'}
df.groupby('date').agg(agg_dict)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.