Из двух дат и частоты получить список дат - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть две даты:

'1990-01-01'

'2020-02-18'

Я хотел бы преобразовать их в диапазон дат список максимум 25 лет:

[ ['1990-01-01', '2015-01-01'], ['2015-01-01', '2020-02-18'] ]

или максимум 5 лет:

[ ['1990-01-01', 1995-01-01'], [1995-01-01', '2000-01-01'], ['2000-01-01', '2005-01-01'], ['2005-01-01', '2010-01-01'], ['2010-01-01', '2015-01-01'], ['2015-01-01', '2020-01-01'], ['2020-01-01', '2020-02-18'] ]

Я пытался с pandas .interval_range безуспешно.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Возможно dateutil.rrule соответствует вашим потребностям. Вы можете определить правило для генерации всех нужных вам дат, например:

dstart=datetime.datetime(2001,1,1)
for a in rrule(YEARLY, dtstart=dstart, interval=5, count=5):
    print(a)

Группировка дат и времени в парах оставлена ​​читателю в качестве упражнения; -)

0 голосов
/ 19 февраля 2020

Вы можете использовать pd.date_range. Поскольку интервал между сгенерированными датами должен составлять 5 лет, вам необходимо добавить конечную дату самостоятельно, а затем создать интервалы из сгенерированных дат:

start = '1990-01-01'
end = '2020-02-18'

s = pd.date_range(start, end, freq='5YS').append(pd.DatetimeIndex([end]))

print(s)
DatetimeIndex(['1990-01-01', '1995-01-01', '2000-01-01', '2005-01-01',
               '2010-01-01', '2015-01-01', '2020-01-01', '2020-02-18'],
          dtype='datetime64[ns]', freq=None)

Затем используйте zip для создания интервал:

list(zip(s[:-1], s[1:]))

[(Timestamp('1990-01-01 00:00:00'), Timestamp('1995-01-01 00:00:00')),
 (Timestamp('1995-01-01 00:00:00'), Timestamp('2000-01-01 00:00:00')),
 (Timestamp('2000-01-01 00:00:00'), Timestamp('2005-01-01 00:00:00')),
 (Timestamp('2005-01-01 00:00:00'), Timestamp('2010-01-01 00:00:00')),
 (Timestamp('2010-01-01 00:00:00'), Timestamp('2015-01-01 00:00:00')),
 (Timestamp('2015-01-01 00:00:00'), Timestamp('2020-01-01 00:00:00')),
 (Timestamp('2020-01-01 00:00:00'), Timestamp('2020-02-18 00:00:00'))]
0 голосов
/ 19 февраля 2020

Похоже, вам нужно pd.date_range.

Пример:

data = pd.date_range('1990-01-01', '2020-02-18',freq="5YS")
print(data)

Выход:

DatetimeIndex(['1990-01-01', '1995-01-01', '2000-01-01', '2005-01-01',
               '2010-01-01', '2015-01-01', '2020-01-01'],
              dtype='datetime64[ns]', freq='5AS-JAN')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...