2017-10-19 16 views
1

La sortie de la pièce de code suivante estmise en forme des entiers dans pivot_table

import numpy, random, pandas 
random.seed(10000) 

sz = 1000000 
pd = pandas.DataFrame({"x":random.choices(range(2), k=sz), "y":random.choices(range(3), k=sz)}) 
pd["values"] = 1 
pd.pivot_table(index="x", columns="y", aggfunc="count", margins=True) 

indiqués ci-dessous

 values        
y   0   1   2  All 
x           
0 166575.0 166726.0 166553.0 499854.0 
1 166823.0 166366.0 166957.0 500146.0 
All 333398.0 333092.0 333510.0 1000000.0 

Comment une déclaration de format peut être ajouté afin que les comptes imprimer sans .0 arrière. Je ne souhaite pas le faire en utilisant un pandas.set_option qui peut changer le comportement pour toutes les données dans cette session.

+2

Pensez-vous que 'pd.pivot_table (index = "x", colonnes = "y", aggfunc = "count", marges = True) .astype (int) '? – jezrael

+0

Cela fonctionne certainement ici. Je vous remercie. Pouvez-vous suggérer une approche où je peux le faire par colonne? Supposons que je veux faire cela pour les colonnes 1 et 2 seulement? – ironv

Répondre

2

Je pense que vous pouvez utiliser astype, pour supprimer des colonnes MultiIndex ajouter le paramètre values:

df = (pd.pivot_table(index="x", 
        columns="y", 
        aggfunc="count", 
        values='values', 
        margins=True) 
     .astype(int)) 

print (df) 
y   0  1  2  All 
x         
0 166575 166726 166553 499854 
1 166823 166366 166957 500146 
All 333398 333092 333510 1000000 

Si vous voulez appliquer astype ony pour certaines colonnes:

df = (pd.pivot_table(index="x", 
        columns="y", 
        aggfunc="count", 
        values='values', 
        margins=True) 

cols = [1,2] 
df[cols] = df[cols].astype(int) 

print (df) 
      0  1  2  All 
x          
0 166575.0 166726 166553 499854.0 
1 166823.0 166366 166957 500146.0 
All 333398.0 333092 333510 1000000.0