2012-04-01 9 views
8

Ich habe eine Pandas DataFrame mit einer Datumsspalte. Es ist kein Index.Pandas pivot_table am Datum

Ich möchte eine pivot_table auf dem Datenrahmen mit Zählaggregat pro Monat für jeden Standort machen.

Die Daten sehen wie folgt aus:

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

I verwendet:

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

die Werte zu schwenken. Ich brauche eine Möglichkeit, cdiff.DATE in einen Monat anstatt in ein Datum zu konvertieren. Ich hoffe, mit etwas, um am Ende wie: Die Daten sehen wie folgt aus:

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

Ich habe versucht, alle Arten von strftime Methoden auf cdiff.DATE ohne Erfolg. Es möchte die Zeichenfolgen, nicht die Serienobjekte anwenden.

+0

ich einige detaillierte Beispiele und alternative Ansätze in diese [** Q & A zur Verfügung gestellt haben ** ] (https://stackoverflow.com/q/47152691/2336654), die Sie oder andere hilfreich finden könnten. – piRSquared

Antwort

11

Ich würde vorschlagen:

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

einen Monatsnamen zu erhalten, eine andere Funktion oder verwenden Sie die eingebauten in calendar.month_name passieren. Um die Daten in dem Format zu erhalten Sie möchten, sollten Sie reset_index auf das Ergebnis nennen, oder könnten Sie auch tun:

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

+2

Danke @Wes, 'cdiff ['Monat'] = cdiff.DATE.apply (Lambda x: datetime.datetime.strftime (x, '% B'))' hat den Trick in Monate konvertiert. – John