2016-11-08 21 views
10

Tôi có dữ liệu hàng tháng. Tôi muốn chuyển đổi nó thành "giai đoạn" trong 3 tháng, trong đó q1 bắt đầu vào tháng 1. Vì vậy, trong ví dụ dưới đây, tập hợp 3 tháng đầu tiên sẽ chuyển thành bắt đầu q2 (định dạng mong muốn: 1996q2). Và giá trị dữ liệu kết quả từ việc tạo ra 3 giá trị hàng tháng cùng nhau là trung bình (trung bình) của 3 cột. Khái niệm, không phức tạp. Có ai biết làm thế nào để làm điều đó trong một swoop? Có khả năng, tôi có thể làm rất nhiều công việc khó khăn thông qua vòng lặp và chỉ hardcode địa ngục ra khỏi nó, nhưng tôi mới để gấu trúc và tìm kiếm một cái gì đó thông minh hơn so với lực lượng vũ phu.cách chuyển đổi dữ liệu hàng tháng thành hàng quý trong gấu trúc

Cảm ơn bạn rất nhiều.

 
1996-04 1996-05 1996-06 1996-07 ..... 
25   19  37  40 

Vì vậy, tôi đang tìm kiếm:

 
1996q2 1996q3 1996q4 1997q1 1997q2 ..... 
avg  avg  avg  ...  ... 

Trả lời

17

bạn có thể sử dụng pd.PeriodIndex(..., freq='Q') kết hợp với groupby(..., axis=1):

In [63]: df 
Out[63]: 
    1996-04 1996-05 2000-07 2000-08 2010-10 2010-11 2010-12 
0  1  2  3  4  1  1  1 
1  25  19  37  40  1  2  3 
2  10  20  30  40  4  4  5 

In [64]: df.groupby(pd.PeriodIndex(df.columns, freq='Q'), axis=1).mean() 
Out[64]: 
    1996Q2 2000Q3 2010Q4 
0  1.5  3.5 1.000000 
1 22.0 38.5 2.000000 
2 15.0 35.0 4.333333 
+1

tôi đã bỏ rơi 'pd.PeriodIndex'. Tôi không còn nữa. – piRSquared

+0

@piRSquared, vâng, nó khá thuận tiện – MaxU

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