根据天选择每小时数据

时间:2018-06-29 15:20:17

标签: python pandas filter time-series selection

我有一个时间序列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月1日,5月6日和6月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 :(得分:1)

  1. every_facet_data = subset(Theoph, Subject == 1) individual_facet_data = subset(Theoph, Subject != 1) individual_facet_data$facet = individual_facet_data$Subject every_facet_data = merge(every_facet_data, data.frame(Subject = 1, facet = unique(individual_facet_data$facet))) plot_data = rbind(every_facet_data, individual_facet_data) library(ggplot2) ggplot(plot_data, aes(x=Time, y=conc, colour=Subject)) + geom_line() + geom_point() + facet_wrap(~ facet) 保存为daily_index
  2. 使用dataframe
  3. 合并索引