2 votes

La sortie de pandas groupby avec cumprod ne montre pas les colonnes groupby

J'essaie de comprendre la différence entre une fonction moyenne, somme et une fonction cumprod.
Lorsque j'exécute un groupby puis la moyenne, j'obtiens la colonne id et une moyenne des valeurs comme prévu. enter image description here

Cependant, lorsque je l'exécute avec cumprod, il n'y a pas de colonne groupby. Comment puis-je m'assurer que je peux obtenir les colonnes par lesquelles je fais le regroupement ? enter image description here

x = [.25,.23,.55,.89,-.90,-.04]
id = ['a', 'a', 'a', 'b', 'b', 'b']
df.groupby('id').mean()
df.groupby('id').cumprod()

5voto

unutbu Points 222216

df.groupby('id').mean() est l'abréviation de df.groupby('id').agg('mean') .

df.groupby('id').cumprod() est l'abréviation de df.groupby('id').transform('cumprod') .

La différence essentielle réside dans le fait que le premier est un groupby/agg tandis que la dernière est une opération de groupby/transform l'opération.

groupby/agg regroupe chaque groupe en une seule valeur. Par conséquent, le groupby/agg peut renvoyer une série dont l'index contient des clés groupby (dans ce cas, id ).

groupby/transform renvoient une série comportant le même nombre de lignes que la série DataFrame original, df . ( cumprod est l'abréviation de produit cumulatif. Puisqu'il renvoie un total courant des produits, il y a une valeur pour chaque ligne). Puisqu'il y a une valeur pour chaque ligne de la base de données DataFrame original, l'index ne peut naturellement pas être les clés groupby. Il doit rester l'index du DataFrame original.

0voto

Vaishali Points 21664

La raison réside dans le rôle des fonctions mean() et cumprod(). Mean : "Renvoie la moyenne des valeurs pour l'axe demandé" Cumprod : "Renvoie le produit cumulé sur l'axe demandé"

Ainsi, mean est censé renvoyer une valeur pour l'axe donné, tandis que cumprod trouvera le produit des valeurs cumulées.

Si vous voulez comparer si cela fonctionne ou non, vous pouvez comparer

df.x.cumprod()

0    0.250000
1    0.057500
2    0.031625
3    0.028146
4   -0.025332
5    0.001013

vs

df.groupby('index').x.cumprod()

0    0.250000
1    0.057500
2    0.031625
3    0.890000
4   -0.801000
5    0.032040

Le résultat groupé change à partir de l'indice 3 représentant l'indice = "b".

0voto

DYZ Points 26904

Contrairement à mean() , cumprod() (qui convertit une série en un seul nombre) n'est pas un agrégateur et convertit une série en une autre série. Le nombre et l'ordre des lignes dans le cadre de données d'origine sont les mêmes que dans le cadre de données d'origine. cumprod() résultat. Vous pouvez fusionner les résultats dans le cadre de données original et avoir accès aux valeurs de id :

df['x_cumprod'] = df.groupby('id').cumprod()
#  id     x  x_cumprod
#0  a  0.25    0.25000
#1  a  0.23    0.05750
#2  a  0.55    0.55000
#3  b  0.89    0.48950
#4  b -0.90   -0.44055
#5  b -0.04   -0.00230

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X