Сравнение интервалов с датами / часами в индексе даты и времени (проверка, находится ли час между 2 периодами)

1

Я знаю, что Im, вероятно, делает эту проблему более сложной, чем она есть, но я по существу пытаюсь определить час моего индекса datetime между временем начала и конечным временем. Я старался:

rbe60['Hour'] = rbe60.index.hour
rbe60['result'] = rbe60['Hour'].between_time('3:00','23:00')

Я также пробовал:

rbe60['Hour'] = rbe60.index[20 <rbe60.index.hour <24]

Но я продолжаю получать ValueError: значение истинности массива с более чем одним элементом неоднозначно. Используйте команды a.any() или a.all()

Это моя голова df

                       Open       H       L       C       O
DateTime                                                   
2013-12-30 14:30:00 -0.0756 -0.0729 -0.0756 -0.0737  2.8847
2013-12-30 15:30:00 -0.0735  -0.072 -0.0737 -0.0722  2.8870
2013-12-30 16:30:00 -0.0722 -0.0721 -0.0728 -0.0722  2.8930
2013-12-30 18:00:00 -0.0728 -0.0728 -0.0728 -0.0728  2.8826
2013-12-30 19:00:00 -0.0721 -0.0721 -0.0721 -0.0721  2.8872
Теги:
pandas
dataframe
numpy
python-3.x

2 ответа

1

При использовании hour атрибута время преобразуется в Int и больше не время, поэтому вместо использования
rbe60['result'] = rbe60['Hour'].between_time('3:00','23:00') использовать
rbe60['result'] = rbe60['Hour'].between(3, 23).

Это также может быть в oneliner:

rbe60['result'] = rbe60.index.hour.to_series().between(3, 23)

Я не думаю, что вы получите (или хотите получить) более кратким, чем это.

Вам нужно будет преобразовать индекс в серию, используя to_series(), поскольку между() является методом Серии.

  • 0
    Есть ли более краткий способ достижения этой цели?
  • 0
    есть причина, почему это не сработает: rbe60 ['Hour'] = rbe60.index.hour.between (3,23)
Показать ещё 9 комментариев
0

Если ваш индекс не является datetime, используйте pd.to_datetime для принуждения, а затем to_series + between:

pd.to_datetime(rbe60.index, errors='coerce').hour.to_series().between(3, 23))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню