我们可以在 pandas groupby agg 函数中使用迭代器吗?

Can we use iterables in pandas groupby agg function?

我有一个 pandas groupby 函数。 我有另一个 dict 形式的输入,它具有 {column:aggfunc} 结构,如下所示:

d = {'production': 'sum',
     'Demand': 'first'}

我想用这个字典来应用aggregate函数如下:

df.groupby(['Month']).agg(production=pd.NamedAgg('production', aggfunc='sum'),
                          demand=pd.NamedAgg('Demand', aggfunc='first'))

有什么方法可以使用输入字典 d(可能是通过使用字典推导)实现这一点?

如果字典包含列名并将聚合函数传递给 GroupBy.agg,则列名不会更改:

df = pd.DataFrame({'Month': ['jan', 'jan', 'feb'],
                   'production':[1,5,9],
                   'Demand': list('abc')})

d = {'production': 'sum', 'Demand': 'first'}

df = df.groupby(['Month']).agg(d)
print (df)
       production Demand
Month                   
feb             9      c
jan             6      a

如果还需要通过字典中的命名聚合设置新的列名称:

d = {'production123': ('production', 'sum'), 'demand':('Demand',  'first')}


df = df.groupby(['Month']).agg(**d)
print (df)
       production123 demand
Month                      
feb                9      c
jan                6      a