Les documents montrent comment appliquer plusieurs fonctions sur un objet groupby à la fois en utilisant un dict avec les noms des colonnes de sortie comme clés:
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
Cependant, cela ne fonctionne que sur un objet Groupby Series. Et lorsqu'un dict est également transmis à un groupe par DataFrame, il s'attend à ce que les clés soient les noms de colonne auxquels la fonction sera appliquée.
Ce que je veux faire, c'est appliquer plusieurs fonctions à plusieurs colonnes (mais certaines colonnes seront exploitées plusieurs fois). De plus, certaines fonctions dépendent d'autres colonnes de l'objet groupby (comme les fonctions sumif). Ma solution actuelle consiste à aller colonne par colonne et à faire quelque chose comme le code ci-dessus, en utilisant lambdas pour les fonctions qui dépendent d'autres lignes. Mais cela prend beaucoup de temps (je pense qu'il faut beaucoup de temps pour parcourir un objet groupby). Je vais devoir le changer pour que je répète tout l'objet groupby en une seule fois, mais je me demande s'il y a un moyen intégré dans les pandas pour le faire quelque peu proprement.
Par exemple, j'ai essayé quelque chose comme
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(), ...)
mais comme prévu, j'obtiens une KeyError (puisque les clés doivent être une colonne si elle agg
est appelée à partir d'un DataFrame).
Y a-t-il une manière intégrée de faire ce que j'aimerais faire, ou une possibilité que cette fonctionnalité soit ajoutée, ou devrais-je simplement parcourir le groupe manuellement?
Merci