簡體   English   中英

熊貓重新采樣到現有指數

[英]Pandas resampling to the existing index

我有很長的時間序列,以下列數據結束。

               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

它沒有給出數據幀的正確的最后日期。 重采樣數據幀中還有其他日期也已關閉。 基本上Pandas沒有使用現有的索引來查找月末,但它是自己的工作日日歷。

有沒有我可以提供給Pandas重采樣功能的選項,以便它使用現有索引來實現所需的結果,即

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

您需要從索引和最后一個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

您可以根據年份和月份刪除重復項,並僅保留最后一行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM