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.

25
demandé sur user4943236 2016-01-10 09:38:26

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
38
répondu David Maust 2016-01-10 07:13:50