2012-04-01 27 views
8

Tengo un pandas DataFrame con una columna de fecha. No es un índice.pandas pivot_table en la fecha

Quiero hacer un pivot_table en el marco de datos usando el agregado de conteo por mes para cada ubicación.

Los datos se ven así:

['INDEX']     DATE LOCATION COUNT 
0   2009-01-02 00:00:00  AAH  1 
1   2009-01-03 00:00:00  ABH  1 
2   2009-01-03 00:00:00  AAH  1 
3   2009-01-03 00:00:00  ABH  1 
4   2009-01-04 00:00:00  ACH  1

utilicé:

pivot_table(cdiff, values='COUNT', rows=['DATE','LOCATION'], aggfunc=np.sum)

pivoten los valores. Necesito una forma de convertir cdiff.DATE a un mes en lugar de una fecha. espero terminar con algo como: Los datos se ven así:

 
    MONTH LOCATION COUNT 
January  AAH  2 
January  ABH  2 
January  ACH  1 

he intentado todo tipo de métodos de strftime cdiff.DATE sin éxito. Quiere aplicar cadenas a cadenas, no objetos en serie.

+0

que he proporcionado varios ejemplos detallados y enfoques alternativos en este [** ** Q & A ] (https://stackoverflow.com/q/47152691/2336654) que usted u otros podrían encontrarle útil. – piRSquared

Respuesta

11

que sugeriría:

months = cdiff.DATE.map(lambda x: x.month) 
pivot_table(cdiff, values='COUNT', rows=[months, 'LOCATION'], 
      aggfunc=np.sum) 

Para obtener el nombre del mes, pasar una función diferente o utilizar el built-in calendar.month_name. Para obtener los datos en el formato que desee, debe llamar reset_index en el resultado, o también se puede hacer:

cdiff.groupby([months, 'LOCATION'], as_index=False).sum()

+2

Gracias @Wes, 'cdiff ['month'] = cdiff.DATE.apply (lambda x: datetime.datetime.strftime (x, '% B'))' hizo el truco para convertir a meses. – John

Cuestiones relacionadas