Pandas 对现有索引进行重采样

Spi*_*or8 5 python pandas

我有一个很长的时间序列,以以下数据结尾。

               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
Run Code Online (Sandbox Code Playgroud)

我想对其进行重新采样,使其成为每月数据,但我有兴趣保留时间序列中实际的最后一个月日期。如果我做,

df.resample('BM').last()
Run Code Online (Sandbox Code Playgroud)

给出以下尾端输出

2017-05-31  107.32  241.44 
2017-06-30  107.57  244.17
Run Code Online (Sandbox Code Playgroud)

它没有给出数据帧的正确最后日期。重新采样的数据框中还有其他日期也已关闭。本质上,Pandas 并不使用现有的索引来查找月末,而是使用自己的工作日日历。

是否有一个选项可以输入 Pandas 重采样函数,以便它使用现有索引来实现所需的结果

2017-05-31  107.32  241.44 
2017-06-02  107.57  244.17
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

您需要从索引和最后创建新列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
Run Code Online (Sandbox Code Playgroud)

但如果只需要按月重新采样:

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
Run Code Online (Sandbox Code Playgroud)