Pandas date_range() 月中月末
Pandas date_range() for middle and end of month
我可以使用
指定月末的日期范围
import pandas as pd
monthend_range = pd.date_range(datetime.date(2017,12,10), datetime.date(2018,2,2), freq='BM')
有没有一种简单的方法可以将月中包含在上述范围内以形成月中月末指数?假设我们想要的逻辑是在上面的代码中使用连续的月末并找到月末中间的工作日。如果那天不是工作日,则尝试第二天和接下来的一天,直到我们得到一个工作日。
预期输出是
['2017-12-29', '2018-01-16', '2018-01-31']
这似乎有点不一致,因为 2017-12-15 是日期范围内的月中。但程序是获取月末,然后在月末之间进行插值。当然除非有更好的方法来处理这个问题。
想法是为每个值创建工作日范围,首先省略 select 中间的值,最后使用 Index.union
连接在一起:
a = []
for x in monthend_range[1:]:
r = pd.date_range(x.to_period('m').to_timestamp(), x, freq='B')
a.append(r[len(r)//2])
print (a)
[Timestamp('2018-01-16 00:00:00', freq='B')]
out = monthend_range.union(a)
print (out)
DatetimeIndex(['2017-12-29', '2018-01-16', '2018-01-31'], dtype='datetime64[ns]', freq=None)
我可以使用
指定月末的日期范围import pandas as pd
monthend_range = pd.date_range(datetime.date(2017,12,10), datetime.date(2018,2,2), freq='BM')
有没有一种简单的方法可以将月中包含在上述范围内以形成月中月末指数?假设我们想要的逻辑是在上面的代码中使用连续的月末并找到月末中间的工作日。如果那天不是工作日,则尝试第二天和接下来的一天,直到我们得到一个工作日。
预期输出是
['2017-12-29', '2018-01-16', '2018-01-31']
这似乎有点不一致,因为 2017-12-15 是日期范围内的月中。但程序是获取月末,然后在月末之间进行插值。当然除非有更好的方法来处理这个问题。
想法是为每个值创建工作日范围,首先省略 select 中间的值,最后使用 Index.union
连接在一起:
a = []
for x in monthend_range[1:]:
r = pd.date_range(x.to_period('m').to_timestamp(), x, freq='B')
a.append(r[len(r)//2])
print (a)
[Timestamp('2018-01-16 00:00:00', freq='B')]
out = monthend_range.union(a)
print (out)
DatetimeIndex(['2017-12-29', '2018-01-16', '2018-01-31'], dtype='datetime64[ns]', freq=None)