2012-04-01 42 views
8

Mam pandę DataFrame z kolumną daty. To nie jest indeks.Panda pivot_table w dniu

Chcę wykonać tabelę przestawną na ramce danych, używając miesięcznego liczenia dla każdej lokalizacji.

Dane wyglądać następująco:

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

kiedyś:

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

obracać wartości. Potrzebuję sposobu na konwersję CDiff.DATE na miesiąc, a nie na datę. mam nadzieję skończyć z czymś takim: Dane wyglądać następująco:

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

próbowałem wszelkiego rodzaju strftime metod na cdiff.DATE bez powodzenia. Chce zastosować do łańcuchów, a nie do obiektu szeregowego.

+0

Mam pod warunkiem kilka szczegółowych przykładów i alternatywnych podejść w ten [** Q & A ** ] (https://stackoverflow.com/q/47152691/2336654), które Ty lub inni mogą okazać się pomocni. – piRSquared

Odpowiedz

11

Proponuję:

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

Aby uzyskać nazwę miesiąca, przechodzą inną funkcję lub skorzystać z wbudowanego w calendar.month_name. Aby uzyskać dane w żądanym formacie, należy zadzwonić reset_index od wyniku, czy może to zrobić również:

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

+2

Dzięki @Wes, 'cdiff ['month'] = cdiff.DATE.apply (lambda x: datetime.datetime.strftime (x, '% B'))' sprawił, że konwersja na miesiące. – John