Выберите почасовые данные на основе дней - PullRequest
0 голосов
/ 29 июня 2018

У меня есть временной ряд 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].

1 Ответ

0 голосов
/ 29 июня 2018
  1. сохранить daily_index как dataframe
  2. объединить с индексом, используя hourly_df.merge(daily_index, how = 'inner', ...)
...