Могу ли я выбрать два периода времени одновременно, используя функцию Dataframe.between_time?

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных, подобный этому.

введите описание изображения здесь

И я хотел бы выбирать данные в течение 9: 30-11:30 и 13: 00-15:00 каждый день. Однако, используя функцию DataFrame.between_time, я могу выбрать только один период данных.

Метод, который я использую сейчас, — это выбрать два периода данных отдельно и объединить два полученных мной фрейма данных, затем изменить порядок индекса. Однако мне любопытно, есть ли какой-либо способ, которым я могу выбрать два периода данных одновременно?

Спасибо за ваше время.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.between_time.html

Комментарии:

1. добавьте свои входные данные в dataframe, а не на скриншоте, и покажите нам ожидаемый результат

Ответ №1:

Используйте DatetimeIndex.indexer_between_time для позиций совпадающих времен для обоих диапазонов, объедините с сортировкой по numpy.union1d и выберите последние строки по DataFrame.iloc :

 rng = pd.date_range('2017-04-03', periods=100, freq='30Min')
df = pd.DataFrame({'a': range(100)}, index=rng)  
print (df.head())
                     a
2017-04-03 00:00:00  0
2017-04-03 00:30:00  1
2017-04-03 01:00:00  2
2017-04-03 01:30:00  3
2017-04-03 02:00:00  4

idx1 = df.index.indexer_between_time('9:30', '11:30')
idx2 = df.index.indexer_between_time('13:00', '15:00')

df = df.iloc[np.union1d(idx1,idx2)]
  

 print (df)

                      a
2017-04-03 09:30:00  19
2017-04-03 10:00:00  20
2017-04-03 10:30:00  21
2017-04-03 11:00:00  22
2017-04-03 11:30:00  23
2017-04-03 13:00:00  26
2017-04-03 13:30:00  27
2017-04-03 14:00:00  28
2017-04-03 14:30:00  29
2017-04-03 15:00:00  30
2017-04-04 09:30:00  67
2017-04-04 10:00:00  68
2017-04-04 10:30:00  69
2017-04-04 11:00:00  70
2017-04-04 11:30:00  71
2017-04-04 13:00:00  74
2017-04-04 13:30:00  75
2017-04-04 14:00:00  76
2017-04-04 14:30:00  77
2017-04-04 15:00:00  78