В docs показано, как применять несколько функций для объекта 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
Однако это работает только на объекте Series groupby. И когда dict аналогично передается группе DataFrame, он ожидает, что ключи будут именами столбцов, к которым будет применена функция.
Я хочу сделать несколько функций для нескольких столбцов (но некоторые столбцы будут работать несколько раз). Кроме того, некоторые функции будут зависеть от других столбцов в объекте groupby (например, функции sumif). Мое текущее решение состоит в том, чтобы перейти от столбца к столбцу и сделать что-то вроде кода выше, используя lambdas для функций, которые зависят от других строк. Но это занимает много времени (я думаю, что для прохождения через объект groupby требуется много времени). Мне придется изменить его так, чтобы я перебирал весь объект groupby за один проход, но мне интересно, если это сделано в pandas, чтобы сделать это несколько чисто.
Например, я пробовал что-то вроде
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).
Есть ли встроенный способ сделать то, что я хотел бы сделать, или возможность добавления этой функциональности или мне просто нужно выполнить итерацию через группу вручную?
Спасибо