首页 > 解决方案 > Python 3 - 我需要为每个系统创建一个带有 ceil 和 floor 的新 df

问题描述

每个人。

所以我有一个数据框,它包含每个系统描述的每个故障、故障事件、开始时间和结束时间。我需要将开始时间四舍五入到最低十分钟,将结束时间四舍五入到最高十分钟。

例如:

system   event             start                end
A0201    No communication  2021-01-01 00:03:20  2021-01-01 01:36:01
A0202    Turbine Pause     2021-01-01 11:47:23  2021-01-01 11:49:43
A0201    Acelerometer Vib  2021-01-02 16:47:30  2021-01-02 16:53:51

我需要的输出是:

system   event             start                end
A0201    No communication  2021-01-01 00:00:00  2021-01-01 01:40:00
A0202    Turbine Pause     2021-01-01 11:40:00  2021-01-01 11:50:00
A0201    Acelerometer Vib  2021-01-02 16:40:00  2021-01-02 17:00:00

这只是我的数据框的 3 行。我的 df 有 10.000 多行,包含 49 个不同的系统和 100 多个故障事件

我想到了 ceil() 和 floor() 函数,但我在编写 for 循环时遇到了困难。谁能帮我?

谢谢!

标签: pythonpandasnumpymath

解决方案


假设您的startandend列已经是 type datetime,您可以使用.dt.floorand .dt.ceilwith10min作为频率:

df.start = df.start.dt.floor('10min')
df.end = df.end.dt.ceil('10min')

df
#  system             event               start                 end
#0  A0201  No communication 2021-01-01 00:00:00 2021-01-01 01:40:00
#1  A0202     Turbine Pause 2021-01-01 11:40:00 2021-01-01 11:50:00
#2  A0201  Acelerometer Vib 2021-01-02 16:40:00 2021-01-02 17:00:00

推荐阅读