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