2013-09-26 150 views
6

Dưới đây là một đoạn đầu ra bảng pivot của tôi trong định dạng .csv sau khi sử dụng gấu trúc chức năng pivot_table:Cách sử dụng gấu trúc để nhóm các kết quả bảng tổng hợp theo tuần?

Sub-Product  11/1/12 11/2/12 11/3/12 11/4/12 11/5/12 11/6/12 
GP Acquisitions 164 168  54  72  203 167 
GP Applications 190 207  65  91  227 200 
GPF Acquisitions 1124 1142 992 1053 1467 1198 
GPF Applications 1391 1430 1269 1357 1855 1510 

Điều duy nhất tôi cần làm bây giờ là sử dụng groupby trong gấu trúc để tổng hợp các giá trị của tuần mỗi Sản phẩm phụ trước khi tôi xuất ra một tệp .csv.

Dưới đây là kết quả tôi muốn, nhưng nó được thực hiện trong Excel. Cột đầu tiên có thể không chính xác giống nhau nhưng tôi ổn với điều đó. Điều chính tôi cần làm là nhóm các ngày theo tuần để tôi có thể nhận được tổng của dữ liệu được theo tuần. (Xem cách hàng trên cùng có các ngày được nhóm theo mỗi 7 ngày). Hy vọng để có thể làm điều này bằng cách sử dụng python/gấu trúc. Có thể không?

Row Labels 11/4/12 - 11/10/12  11/11/12 - 11/17/12 
GP  
Acquisitions  926      728 
Applications  1092      889 
GPF  
Acquisitions  8206      6425 
Applications  10527      8894 

Trả lời

6

Các công cụ mà bạn cần là resample, mà mặc nhiên sử dụng groupby qua một khoảng thời gian/tần số và áp dụng một chức năng như trung bình hoặc tổng.

Đọc dữ liệu.

In [2]: df 
Out[2]: 
     Sub-Product 11/1/12 11/2/12 11/3/12 11/4/12 11/5/12 11/6/12 
GP Acquisitions  164  168  54  72  203  167 
GP Applications  190  207  65  91  227  200 
GPF Acquisitions  1124  1142  992  1053  1467  1198 
GPF Applications  1391  1430  1269  1357  1855  1510 

Thiết lập MultiIndex.

In [4]: df = df.reset_index().set_index(['index', 'Sub-Product']) 

In [5]: df 
Out[5]: 
        11/1/12 11/2/12 11/3/12 11/4/12 11/5/12 11/6/12 
index Sub-Product              
GP Acquisitions  164  168  54  72  203  167 
     Applications  190  207  65  91  227  200 
GPF Acquisitions  1124  1142  992  1053  1467  1198 
     Applications  1391  1430  1269  1357  1855  1510 

Phân tích các cột dưới dạng thời gian biểu thích hợp. (Họ đi vào như dây đàn.)

In [6]: df.columns = pd.to_datetime(df.columns) 

In [7]: df 
Out[7]: 
        2012-11-01 2012-11-02 2012-11-03 2012-11-04 \ 
index Sub-Product              
GP Acquisitions   164   168   54   72 
     Applications   190   207   65   91 
GPF Acquisitions  1124  1142   992  1053 
     Applications  1391  1430  1269  1357 

        2012-11-05 2012-11-06 
index Sub-Product       
GP Acquisitions   203   167 
     Applications   227   200 
GPF Acquisitions  1467  1198 
     Applications  1855  1510 

Resample các cột (axis=1) hàng tuần ('w'), tổng hợp theo tuần. (how='sum' hoặc how=np.sum là cả hai lựa chọn hợp lệ ở đây.)

In [10]: df.resample('w', how='sum', axis=1) 
Out[10]: 
        2012-11-04 2012-11-11 
index Sub-Product       
GP Acquisitions   458   370 
     Applications   553   427 
GPF Acquisitions  4311  2665 
     Applications  5447  3365 
+2

bạn có thể vượt qua '' trục = 1'' để Resample, để tránh những đôi transposing – Jeff

+0

gọn gàng! Đang chỉnh sửa ... –

+0

Cảm ơn! tuy nhiên, nếu tôi muốn dữ liệu bắt đầu tuần thay vì kết thúc tuần thì sao? Ví dụ: cột ngày vẫn như cũ nhưng tất cả dữ liệu bên dưới 2012-11-11 sẽ chuyển sang bên trái để dưới 2012-11-04? – jxn