2017-06-06 71 views
1

我有一個很長的時間序列,以下列數據結束。熊貓重新採樣到現有索引

   ABC  CDE 
Date      
2017-05-26 107.00 241.71 
2017-05-30 107.27 241.50 
2017-05-31 107.32 241.44 
2017-06-01 107.10 243.36 
2017-06-02 107.57 244.17 

我想重新取樣,使之成爲月度數據,但我感興趣的保留時間序列實際每月最後日期。如果我這樣做,

df.resample('BM').last() 

提供了以下尾端輸出

2017-05-31 107.32 241.44 
2017-06-30 107.57 244.17 

不給數據框的正確的最後日期。重採樣數據幀中還有其他日期也是關閉的。本質上熊貓沒有使用現有的索引來查找月末,但它是自己的工作日曆。

是否有一個選項,我可以喂到大熊貓重採樣功能,以便它使用現有的索引來達到預期的效果是

2017-05-31 107.32 241.44 
2017-06-02 107.57 244.17 

回答

1

您需要創建新的索引列,最後set_index

df = df.assign(Date=df.index).resample('BM').last().set_index('Date') 
print (df) 
       ABC  CDE 
Date      
2017-05-31 107.32 241.44 
2017-06-02 107.57 244.17 

但如果需要重採樣僅一個月期限:

m = df.index.to_period('m') 
df = df.reset_index().groupby(m).last().set_index('Date') 
print (df) 
       ABC  CDE 
Date      
2017-05-31 107.32 241.44 
2017-06-02 107.57 244.17 
+0

謝謝您的回答。你能否進一步澄清你的上述方法之間的差異? – Spinor8

+0

首先按工作月份重新抽樣,第二次按月抽查 – jezrael

0

可以刪除基於年份和月份重複,只保留最後一行。

df.assign(m=df.index.to_period('m')).drop_duplicates('m','last').drop('m',1) 
Out[728]: 
       ABC  CDE 
Date      
2017-05-31 107.32 241.44 
2017-06-02 107.57 244.17 

或者您可以按年份和月份使用組,然後從每組中選取最後一行。

df.reset_index()\ 
    .sort_values('Date')\ 
    .assign(m=df.index.to_period('m'))\ 
    .groupby(by='m')\ 
    .last()\ 
    .set_index('Date') 
Out[677]: 
       ABC  CDE 
Date      
2017-05-31 107.32 241.44 
2017-06-02 107.57 244.17