Панды date_range () для середины и конца месяца - PullRequest
1 голос
/ 28 марта 2019

Я могу указать диапазон дат окончания месяца, используя

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 - середина месяца, которая находится в пределах диапазона дат.Но процедура состоит в том, чтобы получить конец месяца, а затем интерполировать между концами.Если, конечно, нет лучшего подхода к решению этого вопроса.

1 Ответ

0 голосов
/ 28 марта 2019

Идея состоит в том, чтобы создать диапазон рабочих дней для каждого значения, в первую очередь опуская, и выбрать значение в середине, последнее использование Index.union для объединения togetehr:

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)
...