2012-04-01 25 views
8

Tôi có gấu trúc DataFrame với cột ngày. Nó không phải là một chỉ mục.Pandas pivot_table vào ngày

Tôi muốn tạo pivot_table trên khung dữ liệu bằng cách sử dụng tổng hợp tổng cộng mỗi tháng cho từng vị trí.

Các dữ liệu giống như thế này:

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

tôi đã sử dụng:

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

xoay quanh các giá trị. Tôi cần một cách để chuyển đổi cdiff.DATE thành một tháng thay vì một ngày. tôi hy vọng sẽ kết thúc với một cái gì đó như: Các dữ liệu giống như thế này:

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

Tôi đã thử tất cả các cách thức của strftime phương pháp trên cdiff.DATE không thành công. Nó muốn áp dụng các chuỗi, không phải đối tượng chuỗi.

+0

tôi đã cung cấp một số ví dụ cụ thể và cách tiếp cận thay thế trong này [** Q & A ** ] (https://stackoverflow.com/q/47152691/2336654) mà bạn hoặc những người khác có thể thấy hữu ích. – piRSquared

Trả lời

11

tôi sẽ đề nghị:

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

Để có được một tên tháng, vượt qua một chức năng khác nhau hoặc sử dụng được xây dựng trong calendar.month_name. Để có được các dữ liệu trong các định dạng mà bạn muốn, bạn nên gọi reset_index vào kết quả, hoặc bạn cũng có thể làm:

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

+2

Cảm ơn @Wes, 'cdiff ['month'] = cdiff.DATE.apply (lambda x: datetime.datetime.strftime (x, '% B'))' đã làm thủ thuật để chuyển đổi thành tháng. – John

Các vấn đề liên quan