【问题标题】:How to filter a pandas DatetimeIndex by day of week and hour in the day如何按星期几和一天中的小时过滤熊猫 DatetimeIndex
【发布时间】:2018-07-10 19:04:32
【问题描述】:

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

[(4, 6), (5, 7)]

最终索引应仅包含星期五(day_of_week = 4) 小时 6 或星期六(day_of_week = 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)]中的星期几和星期几的索引

【问题讨论】:

  • 问题有点模糊。您的数据框是什么样的?操作应该是什么?
  • @skrubber 添加了说明。

标签: python pandas filter datetimeindex


【解决方案1】:

您应该添加一个列day_of_week 和一个列hour,然后您可以对这些列进行归档。

例如:

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)]
])

请注意,我会遍历您的所有条件,然后连接所有生成的数据帧。

【讨论】:

    【解决方案2】:

    您可以将index 中的dayofweekhour 方法存储在变量中,然后将它们与iloc 一起使用来过滤:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多