2012-04-01 7 views
8

Ho un panda DataFrame con una colonna della data. Non è un indice.pivot_table in data

Voglio fare un pivot_table sul dataframe utilizzando il conteggio aggregato al mese per ogni posizione.

I dati simile a questa:

['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

ho usato:

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

per ruotare i valori. Ho bisogno di un modo per convertire cdiff.DATE in un mese piuttosto che in una data. spero di finire con qualcosa di simile: I dati simile a questa:

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

ho provato tutti i tipi di metodi strftime su cdiff.DATE senza successo. Vuole applicare le stringhe, non le serie.

+0

ho fornito numerosi esempi dettagliati e approcci alternativi in ​​questo [** Q & A ** ] (https://stackoverflow.com/q/47152691/2336654) che tu o altri potrebbero trovare utili. – piRSquared

risposta

11

vorrei suggerire:

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

Per ottenere un nome di un mese, passare una funzione diversa o utilizzare il built-in calendar.month_name. Per ottenere i dati nel formato desiderato, è necessario chiamare reset_index sul risultato, o si potrebbe anche fare:

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

+2

Grazie a @Wes, 'cdiff ['month'] = cdiff.DATE.apply (lambda x: datetime.datetime.strftime (x, '% B'))' ha fatto il trucco per convertire in mesi. – John