我们可以在 pandas groupby agg 函数中使用 iterables 吗?

muf*_*sir 3 python aggregate pandas pandas-groupby

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

d = {'production': 'sum',
     'Demand': 'first'}
Run Code Online (Sandbox Code Playgroud)

我想使用这个字典来应用aggregate函数,如下所示:

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

有什么方法可以使用输入字典来实现此目的d(可能通过使用字典理解)?

jez*_*ael 6

如果字典包含列名称并且聚合函数将其传递给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
Run Code Online (Sandbox Code Playgroud)

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

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


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