Pandas: groupe par et différence de tableau croisé dynamique
Je viens de commencer à apprendre les Pandas et je me demandais s'il y avait une différence entre les fonctions pandas groupby
et pandas pivot_table
. Quelqu'un peut-il m'aider à comprendre la différence entre eux.
De l'aide serait appréciée.
1 réponses
Les deux pivot_table
et groupby
sont utilisés pour agréger votre dataframe. La différence est seulement en ce qui concerne la forme du résultat.
Utiliser pd.pivot_table(df, index=["a"], columns=["b"], values=["c"], aggfunc=np.sum)
la création d'une table où a
est sur l'axe des lignes, b
est sur l'axe des colonnes, et les valeurs sont la somme de c
.
Exemple:
df = pd.DataFrame({"a": [1,2,3,1,2,3], "b":[1,1,1,2,2,2], "c":np.random.rand(6)})
pd.pivot_table(df, index=["a"], columns=["b"], values=["c"], aggfunc=np.sum)
b 1 2
a
1 0.528470 0.484766
2 0.187277 0.144326
3 0.866832 0.650100
En utilisant groupby
, Les dimensions données sont placées dans des colonnes et des lignes sont créées pour chaque combinaison de ces dimensions.
Dans cet exemple, nous créons une série de la somme de valeurs c
, regroupés par toutes les combinaisons uniques de a
et b
.
df.groupby(['a','b'])['c'].sum()
a b
1 1 0.528470
2 0.484766
2 1 0.187277
2 0.144326
3 1 0.866832
2 0.650100
Name: c, dtype: float64
Un analogue de l'utilisation de groupby
est si nous omettons le ['c']
. Dans ce cas, il crée un dataframe (pas une série) des sommes de toutes les colonnes restantes regroupées par des valeurs uniques de a
et b
.
print df.groupby(["a","b"]).sum()
c
a b
1 1 0.528470
2 0.484766
2 1 0.187277
2 0.144326
3 1 0.866832
2 0.650100