【问题标题】:How to filter last 8 hours of a dataframe?如何过滤数据帧的最后 8 小时?
【发布时间】:2018-03-02 18:02:44
【问题描述】:

我正在尝试从数据框中获取最后 8 小时的数据。有什么方法可以实现吗?

假设我有一个带有时间戳的数据框:

Time                  X      Y
19/8/2017 10:00:00  824.93  6.42
19/8/2017 10:20:00  825.88  6.41
19/8/2017 10:40:00  825.59  6.45
19/8/2017 11:00:00  826.18  6.6
19/8/2017 11:20:00  825.2   6.62
19/8/2017 11:40:00  825.3   6.65
19/8/2017 12:00:00  824.72  6.54
19/8/2017 12:20:00  825.72  6.45
19/8/2017 12:40:00  824.99  6.35
19/8/2017 13:00:00  824.63  6.31
19/8/2017 13:20:00  825.87  6.34
19/8/2017 13:40:00  826.12  6.29
19/8/2017 14:00:00  825.41  6.31
19/8/2017 14:20:00  825.34  6.36
19/8/2017 14:40:00  825.15  6.39
19/8/2017 15:00:00  824.87  6.15
19/8/2017 15:20:00  825.57  6.17
19/8/2017 15:40:00  825.35  6.2
19/8/2017 16:00:00  824.94  6.26
19/8/2017 16:20:00  825.86  6.39
19/8/2017 16:40:00  824.74  6.39
19/8/2017 17:00:00  823.46  6.33
19/8/2017 17:20:00  824.46  6.41
19/8/2017 17:40:00  824.67  6.4
19/8/2017 18:00:00  824.38  6.36
19/8/2017 18:20:00  825.23  6.37
19/8/2017 18:40:00  826.09  6.37
19/8/2017 19:00:00  824.77  6.32
19/8/2017 19:20:00  824.18  6.34
19/8/2017 19:40:00  823.82  6.33
19/8/2017 20:00:00  825 6.39
19/8/2017 20:20:00  825.01  6.4
19/8/2017 20:40:00  824.24  6.45
19/8/2017 21:00:00  817.65  6.17
19/8/2017 21:20:00  781.58  4.92
19/8/2017 21:40:00  739.89  3.51

我想从此数据框中提取最近 8 小时的数据。

我试过了,但我无能为力:

last8 = (df["Time"] == (dfs["Time"].shift() + Timedelta(hours = 8))).cumsum()

任何帮助将不胜感激。

【问题讨论】:

  • 您是指从最大时间开始的最后 8 小时,还是当前时间?
  • @Zero,距离数据帧最后一次的 8 小时,即 19/8/2017 21:40:00

标签: python pandas dataframe timestamp


【解决方案1】:

试试这个:

df[df.Time >= pd.datetime.now() - pd.Timedelta('8H')]

【讨论】:

    【解决方案2】:

    从最大时间获取最后 8 小时(在这种情况下是最后一次)

    In [2178]: df[df['Time'] > df['Time'].max() - pd.Timedelta(hours=8)]
    Out[2178]:
                      Time       X     Y
    12 2017-08-19 14:00:00  825.41  6.31
    13 2017-08-19 14:20:00  825.34  6.36
    14 2017-08-19 14:40:00  825.15  6.39
    15 2017-08-19 15:00:00  824.87  6.15
    16 2017-08-19 15:20:00  825.57  6.17
    17 2017-08-19 15:40:00  825.35  6.20
    18 2017-08-19 16:00:00  824.94  6.26
    19 2017-08-19 16:20:00  825.86  6.39
    20 2017-08-19 16:40:00  824.74  6.39
    21 2017-08-19 17:00:00  823.46  6.33
    22 2017-08-19 17:20:00  824.46  6.41
    23 2017-08-19 17:40:00  824.67  6.40
    24 2017-08-19 18:00:00  824.38  6.36
    25 2017-08-19 18:20:00  825.23  6.37
    26 2017-08-19 18:40:00  826.09  6.37
    27 2017-08-19 19:00:00  824.77  6.32
    28 2017-08-19 19:20:00  824.18  6.34
    29 2017-08-19 19:40:00  823.82  6.33
    30 2017-08-19 20:00:00  825.00  6.39
    31 2017-08-19 20:20:00  825.01  6.40
    32 2017-08-19 20:40:00  824.24  6.45
    33 2017-08-19 21:00:00  817.65  6.17
    34 2017-08-19 21:20:00  781.58  4.92
    35 2017-08-19 21:40:00  739.89  3.51
    

    【讨论】:

    • 而且,@MaxU 提出了非常有用的简写 pd.Timedelta('8H') 替代 pd.Timedelta(hours=8)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多