如何为pandas创建滚动月度日期时间索引?

时间:2018-02-05 10:34:37

标签: python pandas datetimeindex

我在pandas中有一个DatetimeIndex,我想使用系列中的最后一个日期将其转换为滚动的DatetimeIndex。

因此,如果我创建一个示例日期时间索引:

dates=pd.DatetimeIndex(pd.date_range(dt(2017,10,1),dt(2018,02,02)))

一个例子

输入:DatetimeIndex,所有日期均在上述范围内:

dates
2017-10-01 
2017-10-02  
     .            
     .            
2018-02-01   
2018-02-02     

所需输出:DatetimeIndex只有每月的第2个(因为这是输入中的最后一个日期):

dates
2017-10-02 
2017-11-02
2017-12-02
2018-01-02
2018-02-02 

尝试

我试过

dates[::-1][::30]

以及

dates[dates.apply(lambda x: x.date().day==2)]

不幸的是,月份可能相差30或31天,因此第一种方法不起作用,而第二种方法在1-30范围内工作数天,而第31种方法每隔一个月就会跳过一次。所以,例如,如果我有:

dates
2017-10-01 
2017-10-02  
     .            
     .            
2018-01-31   

我想要:

dates
2017-10-31 
2017-11-30          
2017-12-31   
2018-01-31  

而第二种方法跳过11月,因为它没有第30个。

有没有办法使用RelativeDelta来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以在Pandas中使用.is_month_end功能。如果日期是月末,则给出一个布尔值数组 - True,否则返回false。

import pandas as pd
import datetime as dt

dates=pd.Series(pd.date_range('2017-10-1','2017-12-31'))
print(dates[dates.is_month_end])

<强>输出

DatetimeIndex(['2017-10-31', '2017-11-30', '2017-12-31'], dtype='datetime64[ns]', freq=None)

这有助于您过滤。