Os documentos mostram como aplicar várias funções em um objeto de grupo por vez, usando um dict com os nomes das colunas de saída como as chaves:
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
No entanto, isso funciona apenas em um objeto de grupo de séries. E quando um ditado é passado de maneira semelhante a um grupo pelo DataFrame, ele espera que as chaves sejam os nomes das colunas às quais a função será aplicada.
O que quero fazer é aplicar várias funções a várias colunas (mas determinadas colunas serão operadas várias vezes). Além disso, algumas funções dependerão de outras colunas no objeto groupby (como funções sumif). Minha solução atual é ir coluna por coluna e fazer algo como o código acima, usando lambdas para funções que dependem de outras linhas. Mas isso está demorando muito (acho que leva muito tempo para percorrer um objeto groupby). Vou precisar alterá-lo para percorrer todo o objeto groupby em uma única execução, mas estou me perguntando se existe um caminho embutido nos pandas para fazer isso de maneira um tanto limpa.
Por exemplo, eu tentei algo como
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(), ...)
mas como esperado, recebo um KeyError (já que as chaves precisam ser uma coluna se agg
forem chamadas de um DataFrame).
Existe alguma maneira integrada de fazer o que eu gostaria de fazer, ou a possibilidade de que essa funcionalidade seja adicionada, ou precisarei apenas percorrer o grupo manualmente?
obrigado