我在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来做到这一点?
答案 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)
这有助于您过滤。