删除早于特定时间的数据

发布于 2025-01-14 20:17:56 字数 1133 浏览 0 评论 0原文

我想从我的数据帧中删除从 00 分钟开始的 2 小时之前的数据(日期时间列位于索引中)。

当我使用下面的代码

df = df[df.index > df.index.max() - pd.Timedelta(hours=2)]
| datetime            | value |
|---------------------|-------|
| 17-03-2022 15:05:00 | 78    |
| 17-03-2022 15:07:00 | 86    |
| 17-03-2022 15:57:00 | 77    |
| 17-03-2022 15:58:00 | 22    |
| 17-03-2022 15:59:00 | 10    |
| 17-03-2022 16:00:00 | 22    |
| 17-03-2022 16:01:00 | 25    |
| 17-03-2022 16:02:00 | 25    |
| 17-03-2022 17:05:00 | 34    |

当前日期时间:'17-03-2022 17:05:00'

时, 代码保留 df 中从“17-03-2022 15:05:00”到“17-03-2022”的所有记录17:05:00'

要求:df中从'17-03-2022 15:00:00'到'17-03-2022 17:05:00'的所有记录

应该从-2hrs的第00分钟开始

| datetime            | value |
|---------------------|-------|
| 17-03-2022 15:00:00 | 18    |
| 17-03-2022 15:05:00 | 78    |
| 17-03-2022 15:07:00 | 86    |
| 17-03-2022 15:57:00 | 77    |
| 17-03-2022 15:58:00 | 22    |
| 17-03-2022 15:59:00 | 10    |
| 17-03-2022 16:00:00 | 22    |
| 17-03-2022 16:01:00 | 25    |
| 17-03-2022 16:02:00 | 25    |
| 17-03-2022 17:05:00 | 34    |

I want to remove data from my dataframe older than say 2 hours from current time starting with 00 mins (datetime column is in index)

when i use below code

df = df[df.index > df.index.max() - pd.Timedelta(hours=2)]
| datetime            | value |
|---------------------|-------|
| 17-03-2022 15:05:00 | 78    |
| 17-03-2022 15:07:00 | 86    |
| 17-03-2022 15:57:00 | 77    |
| 17-03-2022 15:58:00 | 22    |
| 17-03-2022 15:59:00 | 10    |
| 17-03-2022 16:00:00 | 22    |
| 17-03-2022 16:01:00 | 25    |
| 17-03-2022 16:02:00 | 25    |
| 17-03-2022 17:05:00 | 34    |

Current datetime: '17-03-2022 17:05:00'

Issue: My code keeps all records in df from '17-03-2022 15:05:00' to '17-03-2022 17:05:00'

Requirement: All records in df from '17-03-2022 15:00:00' to '17-03-2022 17:05:00'

It should start from 00th minute of -2hrs

| datetime            | value |
|---------------------|-------|
| 17-03-2022 15:00:00 | 18    |
| 17-03-2022 15:05:00 | 78    |
| 17-03-2022 15:07:00 | 86    |
| 17-03-2022 15:57:00 | 77    |
| 17-03-2022 15:58:00 | 22    |
| 17-03-2022 15:59:00 | 10    |
| 17-03-2022 16:00:00 | 22    |
| 17-03-2022 16:01:00 | 25    |
| 17-03-2022 16:02:00 | 25    |
| 17-03-2022 17:05:00 | 34    |

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两仪 2025-01-21 20:17:56

使用 Timestamp.floor> 更改为 >=

df = df[df.index >= (df.index.max() - pd.Timedelta(hours=2)).floor('H')]
print (df)
                     value
datetime                  
2022-03-17 15:00:00     18
2022-03-17 15:05:00     78
2022-03-17 15:07:00     86
2022-03-17 15:57:00     77
2022-03-17 15:58:00     22
2022-03-17 15:59:00     10
2022-03-17 16:00:00     22
2022-03-17 16:01:00     25
2022-03-17 16:02:00     25
2022-03-17 17:05:00     34

Use Timestamp.floor with change > to >=:

df = df[df.index >= (df.index.max() - pd.Timedelta(hours=2)).floor('H')]
print (df)
                     value
datetime                  
2022-03-17 15:00:00     18
2022-03-17 15:05:00     78
2022-03-17 15:07:00     86
2022-03-17 15:57:00     77
2022-03-17 15:58:00     22
2022-03-17 15:59:00     10
2022-03-17 16:00:00     22
2022-03-17 16:01:00     25
2022-03-17 16:02:00     25
2022-03-17 17:05:00     34
岁月蹉跎了容颜 2025-01-21 20:17:56

应删除早于“17-03-2022 15:00:00”的所有数据

如果您需要一小时,请考虑使用 Timestamp.round 考虑以下示例

import pandas as pd
tstamp = pd.Timestamp("17-03-2022 17:05:00")
tstamp2 = (tstamp - pd.Timedelta(hours=2)).round("H")  # H for Hour
print(tstamp2)

输出

2022-03-17 15:00:00

should remove all data older than '17-03-2022 15:00:00'

If you need full hour consider using Timestamp.round consider following example

import pandas as pd
tstamp = pd.Timestamp("17-03-2022 17:05:00")
tstamp2 = (tstamp - pd.Timedelta(hours=2)).round("H")  # H for Hour
print(tstamp2)

output

2022-03-17 15:00:00
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文