我在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名,但却跳过了11月。
有没有办法使用RelativeDelta来做到这一点?
您可以在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)
这将帮助您过滤事物。