#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