Python 如何按星期几和一天中的小时筛选DatetimeIndex

Python 如何按星期几和一天中的小时筛选DatetimeIndex,python,pandas,filter,datetimeindex,Python,Pandas,Filter,Datetimeindex,我有一个pandas DatetimeIndex,我想根据一周中的某一天和一天中的某个小时与列表匹配的标准来过滤索引。 例如,我有一个元组列表,指示每个时间戳的有效时间(星期几、小时、分钟): [(4, 6), (5, 7)] 最终索引应仅包含星期五(本周第4天)第6小时或星期六(本周第5天)第7小时的日期时间 假设输入数据帧如下所示: 2016-04-02 06:30:00 1 2016-04-02 06:45:00 2 2016-04-02 07:00:00 3 2016-04-02

我有一个pandas DatetimeIndex,我想根据一周中的某一天和一天中的某个小时与列表匹配的标准来过滤索引。 例如,我有一个元组列表,指示每个时间戳的有效时间(星期几、小时、分钟):

[(4, 6), (5, 7)]
最终索引应仅包含星期五(本周第4天)第6小时或星期六(本周第5天)第7小时的日期时间

假设输入数据帧如下所示:

2016-04-02 06:30:00  1
2016-04-02 06:45:00  2
2016-04-02 07:00:00  3
2016-04-02 07:15:00  4
2016-04-03 07:30:00  5
2016-04-03 07:45:00  6
2016-04-03 08:00:00  7
在过滤器之后,它应该如下所示:

2016-04-02 06:30:00  1
2016-04-02 06:45:00  2
2016-04-03 07:30:00  5

因为我只在列表中保留其星期日和小时数的索引
[(4,6)、(5,7)]
您应该添加一列
星期日和一列
小时
,然后您可以在该列上进行归档

例如:

df["day_of_week"] = df["date"].dayofweek()
df["hour"] = df["date"].hour()

pd.concat([
    df.loc[df["day_of_week"].isin(x[0]) & df["hour"].isin(x[1])]
    for x in [(4, 6), (5, 7)]
])

请注意,我迭代了所有条件,然后连接了所有生成的数据帧。

您可以将
星期几
小时
方法从
索引
存储在变量中,然后将它们与
iloc
一起使用以过滤:

dayofweek = df.index.dayofweek
hour = df.index.hour

df.iloc[((dayofweek == 4) & (hour == 6)) | ((dayofweek == 5) & (hour == 7))]

这个问题有点含糊。您的数据框看起来怎么样?op应该是什么?@skruber补充了说明。