2017-05-06 49 views
4

我對使用.resample()方法有點困惑。我有一個DateFrame其中指標均YYYY-MM-DD格式TIMEDATE對象的工作,我有對應的物業費在少數城市列的列,如下圖所示:Pandas .resample()方法 - 自定義標籤?

State  California Illinois Pennsylvania Arizona 
RegionName Los Angeles Chicago  Philadelphia Phoenix 
1/1/2000 204400  136800  52700   111000 
2/1/2000 207000  138300  53100   111700 
3/1/2000 209800  140100  53200   112800 
4/1/2000 212300  141900  53400   113700 
5/1/2000 214500  143700  53700   114300 
6/1/2000 216600  145300  53800   115100 
7/1/2000 219000  146700  53800   115600 
8/1/2000 221100  147900  54100   115900 
9/1/2000 222800  149000  54500   116500 

當我申請。重新取樣()方法將其轉化顯示成一個季度視圖,我得到的數據排列如下:

hd = hd.resample('Q').mean() 


State  New York California Illinois Pennsylvania Arizona 
RegionName New York Los Angeles Chicago  Philadelphia Phoenix 
3/31/2000 NaN   207066.6667 138400  53000   111833.3333 
6/30/2000 NaN   214466.6667 143633.3333 53633.33333  114366.6667 
9/30/2000 NaN   220966.6667 147866.6667 54133.33333  116000 

然而,我需要在新創建的索引標籤將被顯示的格式類似於「2000q1」風格,而不是本季度的最後一天(或第一天)。 我已經遍佈熊貓文檔中的.resample()方法頁面,但對於我的生活,我無法弄清楚如何應用這樣的自定義標籤。 任何人都可以幫助我嗎?

親切的問候, Greem

回答

2

我認爲你需要to_periodstrftime

#hd.index = pd.to_datetime(hd.index) 
hd = hd.resample('Q').mean() 
hd.index = hd.index.to_period('q').strftime('%Yq%q') 
print (hd) 
State  California Illinois Pennsylvania Arizona 
RegionName Los Angeles Chicago Philadelphia Phoenix 
2000q1   207066 138400  53000 111833 
2000q2   214466 143633  53633 114366 
2000q3   220966 147866  54133 116000 
+0

這是一個偉大的尖端strftime,我還是新的大熊貓一般,而datetime對象混淆了我的地獄。我的解決方案唯一的問題是我需要'Q'字母是小寫字母,而不是大寫字母。有關於此的任何想法? – Greem666

+0

哎呀,剛剛注意到你已經更新了你的文章,回答了我的後續問題,然後我完成了編輯我的回覆。可能感謝隊友,你搖滾! :) – Greem666

1

你可以設置索引使用to_period一個period版本然後執行groupby

df.index = pd.to_datetime(df.index) 
df.set_index(df.index.to_period('Q')).groupby(level=0).mean() 

State California Illinois Pennsylvania Arizona 
Region Los Angeles Chicago Philadelphia Phoenix 
2000Q1  207066 138400  53000 111833 
2000Q2  214466 143633  53633 114366 
2000Q3  220966 147866  54133 116000 

或者更簡潔地與包括在@ jezrael的回答

df.groupby(pd.to_datetime(df.index).to_period().strftime('%Yq%q')).mean() 

     California Illinois Pennsylvania Arizona 
     Los Angeles Chicago Philadelphia Phoenix 
2000q1  207066 138400  53000 111833 
2000q2  214466 143633  53633 114366 
2000q3  220966 147866  54133 116000