简化pandas groupby().agg()的代码



我有一个数据帧,我正试图根据它进行分组,并获取多列的总和,为此我有以下代码:

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

最新更新