我有一个数据帧,我正试图根据它进行分组,并获取多列的总和,为此我有以下代码:
df=df.groupby(['year','month']).agg({'A':['sum'],'B':['sum'],'C':['sum'],'D':['sum']})
有没有一种方法可以更改agg((中的参数来遍历列表?我正在尝试这样的东西,但显然不起作用。
col=['A','B','C','D']
df=df.groupby(['year','month']).agg({c for c in col})
非常感谢!
你非常接近。请注意,您正在向agg()
传递一个集合,而不是一个字典。字典有一对key: value
,而你只有一个value
。
df=df.groupby(['year','month']).agg({c: ['sum'] for c in df.columns})
因为:
{c: ['sum'] for c in df.columns}
>>> {'A':['sum'],'B':['sum'],'C':['sum'],'D':['sum']}
与你写的相反:
{c for c in df.columns} # you iterated over cols, probably forgot cols=df.columns before. Changed it to df.columns here
>>> {'A', 'B', 'C', 'D'}
编辑:我还假设您对所有列的求和不感兴趣,只对"A"到"D"感兴趣。如果这实际上是你的意图,就像在你的问题下的其他评论中所说的那样,你可以这样做:
df.groupby(['year','month']).sum()
或
df.groupby(['year','month']).agg('sum')