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

问题描述 投票:2回答:1

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

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

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

An example

输入: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 

Attempts

我试过了

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

python pandas datetimeindex
1个回答
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)

这将帮助您过滤事物。

© www.soinside.com 2019 - 2024. All rights reserved.