pandas.pivot_table: как назвать функции для агрегации - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь повернуть панды DataFrame, используя несколько агрегатных функций, некоторые из которых являются лямбда-выражениями.Должно быть отдельное имя для каждого столбца, чтобы иметь возможность агрегирования по нескольким лямбда-функциям.Я попробовал несколько идей, которые я нашел в Интернете, но ни одна не сработала.Это минимальный пример:

df = pd.DataFrame({'col1': [1, 1, 2, 3], 'col2': [4, 4, 5, 6], 'col3': [7, 10, 8, 9]})

pivoted_df = df.pivot_table(index = ['col1', 'col2'], values  = 'col3', aggfunc=[('lam1', lambda x: np.percentile(x, 50)), ('lam2', np.percentile(x, 75)]).reset_index()

Ошибка

AttributeError: 'SeriesGroupBy' object has no attribute 'lam1'

Я пробовал с dictionary, это также приводит к ошибке.Может кто-нибудь помочь?Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я предлагаю использовать здесь DataFrameGroupBy.agg:

f1 = lambda x: np.percentile(x, 50)
f2 = lambda x: np.percentile(x, 75)

pivoted_df = (df.groupby(['col1', 'col2'])['col3']
                .agg([('lam1', f1), ('lam2', f2)])
                .reset_index())
print (pivoted_df)
   col1  col2  lam1  lam2
0     1     4   8.5  9.25
1     2     5   8.0  8.00
2     3     6   9.0  9.00
0 голосов
/ 18 октября 2018

Назовите функции в явном виде:

def lam1(x):
    return np.percentile(x, 50)

def lam2(x):
    return np.percentile(x, 75)

pivoted_df = df.pivot_table(index = ['col1', 'col2'], values  = 'col3',
                            aggfunc=[lam1, lam2]).reset_index()

Тогда ваш ряд агрегации будет соответствующим образом назван:

print(pivoted_df)

   col1  col2  lam1  lam2
0     1     4   8.5  9.25
1     2     5   8.0  8.00
2     3     6   9.0  9.00

документы для pd.pivot_table объясняют, почему:

aggfunc : функция, список функций, dict, значение по умолчанию numpy.mean

Если список функций пройден, полученная сводная таблица будет иметьиерархические столбцы, верхним уровнем которых являются имена функций (, выведенные из самих объектов функций ) Если передано dict, ключ - это столбец для агрегирования, а значение - функция или список функций

...