[英]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.