unstack pivot_table groupby python pandas dataframe pivot-table

python - pivot_table - Tabulación cruzada simple en pandas



plot a pivot table pandas (2)

Tropecé con pandas y parece ideal para cálculos simples que me gustaría hacer. Tengo antecedentes de SAS y pensaba que reemplazaría proc freq, parece que se ampliará a lo que pueda querer hacer en el futuro. Sin embargo, parece que no puedo entender una tarea simple (no estoy seguro si se supone que debo mirar pivot/crosstab/indexing , si debería tener un Panel o DataFrames etc.). ¿Podría alguien darme algunos consejos sobre cómo hacer lo siguiente?

Tengo dos archivos CSV (uno para el año 2010, uno para el año 2011 - datos transaccionales simples) - Las columnas son categoría y cantidad

2010:

AB,100.00 AB,200.00 AC,150.00 AD,500.00

2011:

AB,500.00 AC,250.00 AX,900.00

Estos se cargan en objetos DataFrame separados.

Lo que me gustaría hacer es obtener la categoría, la suma de la categoría y la frecuencia de la categoría, por ejemplo:

2010:

AB,300.00,2 AC,150.00,1 AD,500.00,1

2011:

AB,500.00,1 AC,250.00,1 AX,900.00,1

No puedo determinar si debería usar pivot/crosstab/groupby/an index etc. ... Puedo obtener la suma o la frecuencia, parece que no puedo obtener ambas ... Se vuelve un poco más compleja porque me gustaría hacerlo mes por mes, pero creo que si alguien fuera tan amable de indicarme la técnica / dirección correcta, podré ir desde allí.


v0.21 respuesta

Use pivot_table con el parámetro de index :

df.pivot_table(index=''category'', aggfunc=[len, sum]) len sum value value category AB 2 300 AC 1 150 AD 1 500

<= v0.12

Es posible hacer esto usando pivot_table para aquellos interesados:

In [8]: df Out[8]: category value 0 AB 100 1 AB 200 2 AC 150 3 AD 500 In [9]: df.pivot_table(rows=''category'', aggfunc=[len, np.sum]) Out[9]: len sum value value category AB 2 300 AC 1 150 AD 1 500

Tenga en cuenta que las columnas del resultado están indexadas jerárquicamente. Si tuviera varias columnas de datos, obtendría un resultado como este:

In [12]: df Out[12]: category value value2 0 AB 100 5 1 AB 200 5 2 AC 150 5 3 AD 500 5 In [13]: df.pivot_table(rows=''category'', aggfunc=[len, np.sum]) Out[13]: len sum value value2 value value2 category AB 2 2 300 10 AC 1 1 150 5 AD 1 1 500 5

La razón principal para usar __builtin__.sum vs. np.sum es que se obtiene manejo NA de este último. Probablemente podría interceptar el Python incorporado, hará una nota sobre eso ahora.


Suponiendo que tiene un archivo llamado 2010.csv con contenido

category,value AB,100.00 AB,200.00 AC,150.00 AD,500.00

Luego, usando la habilidad de aplicar múltiples funciones de agregación luego de un groupby , puede decir:

import pandas data_2010 = pandas.read_csv("/path/to/2010.csv") data_2010.groupby("category").agg([len, sum])

Deberías obtener un resultado que se parece a algo

value len sum category AB 2 300 AC 1 150 AD 1 500

Tenga en cuenta que Wes probablemente se acerque para señalar que la suma está optimizada y que probablemente debería usar np.sum.