Подтвердить что ты не робот

Нерегулярные, несмежные периоды в Pandas

Мне нужно представить последовательность событий. Эти события немного необычны в том, что они:

  • Непоследовательных
  • неперекрывающегося
  • нерегулярная продолжительность

Например:

  • 1200 - 1203
  • 1210 - 1225
  • 1304 - 1502

Я хотел бы представлять эти события с помощью Pandas.PeriodIndex, но я не могу понять, как создать объекты Period с нерегулярными длительностью.

У меня есть два вопроса:

  • Есть ли способ создать объекты Period с нерегулярными длительностями, используя существующие функции Pandas?
  • Если нет, можете ли вы предложить, как изменить Pandas, чтобы обеспечить нерегулярную продолжительность объектов Period? (этот комментарий предполагает, что возможно "использование пользовательских классов DateOffset с соответствующим образом созданным onOffset, rollforward, rollback и apply methods" )

Примечания

Обновление 1

Построение a Period с пользовательской продолжительностью выглядит довольно просто. НО Я думаю, что основной камень преткновения будет убеждать PeriodIndex принять Periods с разными freqs. например:.

In [93]: pd.PeriodIndex([pd.Period('2000', freq='D'), 
                         pd.Period('2001', freq='T')])

ValueError: 2001-01-01 00:00 is wrong freq

Похоже, что центральное предположение в PeriodIndex состоит в том, что каждый период имеет тот же freq.

4b9b3361

Ответ 1

Возможное решение, в зависимости от приложения, состоит в том, чтобы выгрузить ваши данные, создав PeriodIndex, который имеет период, равный наименьшей единице временного разрешения, которая вам нужна для обработки ваших данных, а затем разделить данные между бункерами для каждого события, оставив оставшиеся ящики нулевыми.

Ответ 2

если у вас есть период времени, в который вы должны указать дату, включая минуты, например:

pd.PeriodIndex([pd.Period('2000-01-01 00:00', freq='T'), 
                     pd.Period('2001-01-01 00:00', freq='T')])

результат:

PeriodIndex(['2000-01-01 00:00', '2001-01-01 00:00'], dtype='period[T]', freq='T')