У меня есть временной ряд hourly_df
, содержащий некоторые почасовые данные:
import pandas as pd
import numpy as np
hourly_index = pd.date_range(start='2018-01-01', end='2018-01-07', freq='H')
hourly_data = np.random.rand(hourly_index.shape[0])
hourly_df = pd.DataFrame(hourly_data, index=hourly_index)
и у меня есть DatetimeIndex, содержащий некоторые даты (в днях, как я хочу), например,
daily_index = pd.to_datetime(['2018-01-01', '2018-01-05', '2018-01-06'])
Я хочу выбрать каждую строку hourly_df
, дата ее индекса в daily_index
, поэтому в моем случае все почасовые данные с 1, 5 и 6 января. Каков наилучший способ сделать это?
Если я наивно использую hourly_df.loc[daily_index]
, я получаю строки только в 0:00:00 для каждого из трех дней. Мне нужны почасовые данные за целый день для каждого из дней в daily_index
.
Одна из возможностей решить эту проблему - создать фильтр, который принимает дату каждого элемента в индексе hourly_df
и сравнивает, находится ли эта дата в daily_index
.
day_filter = [hour.date() in daily_index.date for hour in hourly_df.index]
hourly_df[day_filter]
Это дает желаемый результат, но кажется, что использование фильтра можно избежать и может быть выполнено в выражении, подобном hourly_df.loc[daily_index.date]
.