繁体   English   中英

Python pandas groupby 聚合一列,同时获得其余列的平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM