消除Pandas时间序列数据中的错误填充行

x8diyxa7  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(92)

我有1分钟的时间序列数据,事件和持续时间列。有时事件不会发生一段时间,但最后一个事件向前填充,直到下一个事件发生。我们知道每个事件应该持续多少分钟,我想删 debugging 误的向前填充的数据点。
数据如下所示:

df
datetime           event     duration
2020-01-01 0:00     x           3
2020-01-01 0:01     x           3  
2020-01-01 0:02     x           3  
2020-01-01 0:03     y           2
2020-01-01 0:04     y           2
2020-01-01 0:05     z           2
2020-01-01 0:06     z           2
2020-01-01 0:07     z           2
2020-01-01 0:08     x           5
...

正如您在0:07所看到的,事件列应该是N/A,但在0:08发生下一个事件之前,该列将填充z。我希望将0:07设置为N/A。持续时间列告诉您事件应该发生多少行。如何实现这一点?
编辑:所以我猜这个想法是,检查持续时间列,计算事件在那个时间发生了多少次,如果它发生的次数超过了持续时间中所说的次数,使它成为NaN,直到下一个事件。x,y,z都是重复发生的事件,所以它们在整个过程中发生了多次。

qcuzuvrc

qcuzuvrc1#

对于df Dataframe ,您可以尝试以下操作:

groups = df["event"].ne(df["event"].shift()).cumsum()
mask = df.groupby(groups).cumcount() >= df["duration"]
df["event"] = df["event"].mask(mask)

首先确定groups中连接的event的组(检查结果bool中event.cumsum列的变化),然后通过比较每组的.cumcountduration来确定不正确的event:当.cumcount大于或等于duration时,它是不正确的(>=,因为.cumcount从0开始)。然后.mask在列event中的那些位置。
样品结果:

datetime event  duration
0 2020-01-01 00:00:00     x         3
1 2020-01-01 00:01:00     x         3
2 2020-01-01 00:02:00     x         3
3 2020-01-01 00:03:00     y         2
4 2020-01-01 00:04:00     y         2
5 2020-01-01 00:05:00     z         2
6 2020-01-01 00:06:00     z         2
7 2020-01-01 00:07:00   NaN         2
8 2020-01-01 00:08:00     x         5

相关问题