2013-09-26 22 views
6
Aşağıda

pandalar pivot_table işlevini kullandıktan sonra .csv formatında benim pivot tablo çıktı snippet'idir:Pivotları pivot tablo sonuçlarını haftaya göre gruplamak nasıl kullanılır?

Şimdi yapmanız gereken tek şey haftada değerleri Özetle pandalar içinde GroupBy kullanmaktır
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 

Her Sub Ürünü bir .csv dosyasına çıkarmadan önce.

İstediğim çıktı aşağıdadır, ancak Excel'de yapılır. İlk sütun tam olarak aynı olmayabilir ama ben bununla iyiyim. Yapmam gereken en önemli şey haftayı günlere göre gruplandırmak, böylece haftaya göre verilerinin toplamını alabilmem. (En üst satırın her 7 günde bir gruplandırılmış tarihlere nasıl sahip olduğunu görün). Bunu python/pandalar kullanarak yapabilmek dileğiyle. Mümkün mü?

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 

cevap

6

ihtiyacınız aracı örtülü bir süre/frekans üzerinden GroupBy kullanır ve ortalama veya toplamı gibi bir işlevi uygular resample vardır.

Veri oku. Bir MultiIndex oluşturma.

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 

uygun tarihsaat olarak sütunları Ayrıştırma. (Onlar dizeleri olarak gelir.)

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 

Yeniden Örnekle haftalık sütunlar (axis=1) ('w'), hafta toplanmasıyla. (how='sum' veya how=np.sum her ikisi de geçerli seçenekler burada.)

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

Eğer '' eksen = 1'' yeniden örneklemek için, çift aktaran – Jeff

+0

Temiz önlemek için geçebilir! Düzenleme ... –

+0

Teşekkürler! Ancak, hafta sonu yerine hafta sonu veri istiyorsam ne olur? Örneğin, tarih sütunu olduğu gibi kalır, ancak 2012-11-11'in altındaki tüm veriler 2012-11-04'ün altından sola kaydırılır mı? – jxn

İlgili konular