在Pandas中groupby之后聚合具有不同功能的不同列集

问题描述 投票:2回答:1

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

所以一个天真和不成功的尝试如下:

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'

我怎样才能实现目标?

python pandas group-by aggregate
1个回答
2
投票

dict.fromkeysmerge一起创建字典:

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
© www.soinside.com 2019 - 2024. All rights reserved.