2

我在 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     

期望的输出:只有每月 2 号的 DatetimeIndex(因为那是输入中的最后一个日期):

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 来做到这一点?

4

1 回答 1

1

您可以使用.is_month_endPandas 中的功能。这给出了一个布尔值数组——True如果日期是月底,否则为假。

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)

这将帮助您过滤事物。

于 2018-02-05T10:47:09.360 回答