Comment faire un panda tableau croisé avec des pourcentages?

Donné un dataframe avec différentes variables catégorielles, comment puis-je retourner un croisement avec des pourcentages au lieu de fréquences?

df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
                   'B' : ['A', 'B', 'C'] * 8,
                   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                   'D' : np.random.randn(24),
                   'E' : np.random.randn(24)})


pd.crosstab(df.A,df.B)


B       A    B    C
A               
one     4    4    4
three   2    2    2
two     2    2    2

En utilisant les marges de l'option dans le tableau croisé de calcul de ligne et de colonne des totaux de nous assez proche à penser qu'il devrait être possible à l'aide d'un aggfunc ou groupby, mais mon pauvre cerveau ne peut pas penser.

B       A     B    C
A               
one     .33  .33  .33
three   .33  .33  .33
two     .33  .33  .33
  • Ne serait-il pas s'attendre à la table à 0.167 0.167 0.167\n 0.083 0.083 0.083\n 0.083 0.083 0.083?
  • Je suppose que vous voulez spécifiquement le "pour cent au sein de la ligne" (par exemple, en.wikipedia.org/wiki/Crosstab).
  • Dans les Pandas 0.18.1, il semble que vous pouvez passer normaliser="index" pour diviser chaque entrée dans la ligne de la somme .
InformationsquelleAutor Brian Keegan | 2014-01-21