crear una tabla dinámica en pandas usando el recuento de ocurrencia de valor [duplicado]

4

Estoy intentando crear tabla cruzada / tabla dinámica en pandas:

import pandas as pd
import numpy as np

df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two','two'],'bar': ['A', 'A', 'C', 'B', 'B', 'C']})

sin embargo, mis intentos surgen como:

pd.pivot(df, index='foo', columns='bar')

TypeError: pivot_simple() got multiple values for argument 'index'

y el segundo:

pd.pivot_table(data = df, values = 'bar', index = 'bar', columns = 'foo', aggfunc=lambda x: np.count_nonzero(x))

foo one two
bar     
A   4.0 NaN
B   NaN 4.0
C   2.0 2.0

El resultado que busco lograr es el siguiente:

        A   B   C
one     2       1
two        2    1
0
10

Conmutar el columny indexuso lencomo aggfunc:

df.pivot_table(index='foo', columns='bar', values='foo', aggfunc=len, fill_value=0)

#bar  A  B  C
#foo         
#one  2  0  1
#two  0  2  1

O simplemente usa pd.crosstab:

pd.crosstab(df.foo, df.bar)

#bar  A  B  C
#foo         
#one  2  0  1
#two  0  2  1
1
  • 2
    clavado, pd.crosstab funciona de maravilla !!! 21 de junio de 2018 a las 3:13