Select 基于天数的每小时数据
Select hourly data based on days
我有一个时间序列 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'])
我想 select hourly_df
的每一行,它的索引日期在 daily_index
中,所以在我的例子中,所有从 1 月 1 日、5 日和 6 日开始的每小时数据。最好的方法是什么?
如果我天真地使用 hourly_df.loc[daily_index]
,我只会在三天的每一天获取 0:00:00 处的行。我想要的是 daily_index
.
中每一天的全天每小时数据
解决这个问题的一种可能性是创建一个过滤器,它获取 hourly_df
索引中每个元素的日期,并比较这个日期是否在 daily_index
.[=22 中=]
day_filter = [hour.date() in daily_index.date for hour in hourly_df.index]
hourly_df[day_filter]
这会产生所需的输出,但似乎可以避免使用过滤器,并且可以在类似于 hourly_df.loc[daily_index.date]
.
的表达式中完成
- 将
daily_index
保存为 dataframe
- 使用
hourly_df.merge(daily_index, how = 'inner', ...)
合并索引
我有一个时间序列 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'])
我想 select hourly_df
的每一行,它的索引日期在 daily_index
中,所以在我的例子中,所有从 1 月 1 日、5 日和 6 日开始的每小时数据。最好的方法是什么?
如果我天真地使用 hourly_df.loc[daily_index]
,我只会在三天的每一天获取 0:00:00 处的行。我想要的是 daily_index
.
解决这个问题的一种可能性是创建一个过滤器,它获取 hourly_df
索引中每个元素的日期,并比较这个日期是否在 daily_index
.[=22 中=]
day_filter = [hour.date() in daily_index.date for hour in hourly_df.index]
hourly_df[day_filter]
这会产生所需的输出,但似乎可以避免使用过滤器,并且可以在类似于 hourly_df.loc[daily_index.date]
.
- 将
daily_index
保存为dataframe
- 使用
hourly_df.merge(daily_index, how = 'inner', ...)
合并索引