Python 在Pandas中的groupby之后聚合具有不同函数的不同列集

Python 在Pandas中的groupby之后聚合具有不同函数的不同列集,python,pandas,group-by,aggregate,Python,Pandas,Group By,Aggregate,我希望能够在数据帧中传递包含列名的列表的名称,并在groupby之后将不同的聚合函数应用于每个集合 因此,一次天真而失败的尝试如下: import pandas as pd import seaborn as sns mpg= sns.load_dataset('mpg') variables_to_mean = ['cylinders', 'displacement'] variables_to_median = ['weight', 'horsepower'] mpg.groupby(

我希望能够在数据帧中传递包含列名的列表的名称,并在groupby之后将不同的聚合函数应用于每个集合

因此,一次天真而失败的尝试如下:

import pandas as pd
import seaborn as sns

mpg= sns.load_dataset('mpg')

variables_to_mean = ['cylinders', 'displacement']
variables_to_median = ['weight', 'horsepower']

mpg.groupby(['model_year', 'origin']).agg({ variables_to_mean : 'mean', variables_to_median : 'median'})

TypeError: unhashable type: 'list'

如何实现我的目标?

通过dict.fromkeys创建字典,并一起:

variables_to_mean = ['cylinders', 'displacement']
variables_to_median = ['weight', 'horsepower']

d = {**dict.fromkeys(variables_to_mean, 'mean'),**dict.fromkeys(variables_to_median, 'median')}
print (d)
{'cylinders': 'mean', 'displacement': 'mean', 'weight': 'median', 'horsepower': 'median'}

df = mpg.groupby(['model_year', 'origin']).agg(d)

print (df.head())
                   cylinders  displacement  weight  horsepower
model_year origin                                             
70         europe   4.000000    107.800000  2375.0        90.0
           japan    4.000000    105.000000  2251.0        91.5
           usa      7.636364    336.909091  3651.0       167.5
71         europe   4.000000     95.000000  2069.5        73.0
           japan    4.000000     88.250000  1951.5        78.5