Я знаю, что 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
При использовании 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(), поскольку между() является методом Серии.
Если ваш индекс не является datetime
, используйте pd.to_datetime
для принуждения, а затем to_series
+ between
:
pd.to_datetime(rbe60.index, errors='coerce').hour.to_series().between(3, 23))