У документах показують , як застосувати кілька функцій на об'єкті GroupBy в той час , використовуючи Dict з іменами виведення стовпців в якості ключів:
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
Однак це працює лише на об'єкті групи об'єктів. І коли дикт аналогічно передається групі за допомогою DataFrame, він очікує, що ключі будуть назвами стовпців, до яких буде застосована функція.
Що я хочу зробити, це застосувати кілька функцій до декількох стовпців (але певні стовпці будуть працювати декількома разів). Також деякі функції залежатимуть від інших стовпців об'єкта groupby (як функції sumif). Моє поточне рішення - перейти колонку за стовпцем і робити щось на зразок коду вище, використовуючи лямбда для функцій, які залежать від інших рядків. Але це займає багато часу (я думаю, що для перегляду об’єкта через групу потрібно тривалий час). Мені доведеться змінити це так, щоб я повторював весь об'єкт groupby за один запуск, але мені цікаво, чи є вбудований спосіб у пандах зробити це дещо чисто.
Наприклад, я спробував щось подібне
grouped.agg({'C_sum' : lambda x: x['C'].sum(),
'C_std': lambda x: x['C'].std(),
'D_sum' : lambda x: x['D'].sum()},
'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
але, як очікувалося, я отримую KeyError (оскільки ключі повинні бути стовпчиком, якщо agg
викликається з DataFrame).
Чи є якийсь вбудований спосіб робити те, що я хотів би зробити, або можливість, щоб ця функціональність була додана, або мені просто потрібно буде повторити групу вручну?
Дякую