Агрегирование различных наборов столбцов с различными функциями после группового в Pandas - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу иметь возможность передавать имена списков, содержащих имена столбцов в кадре данных, и применять после группирования различные агрегирующие функции к каждому набору.

Итак, наивной и неудачной попыткой было следующее:

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'

Как мне достичь своей цели?

1 Ответ

0 голосов
/ 07 февраля 2019

Создать словарь по 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
...