Panda数据框条件变换

3

我正在处理csv时间序列数据,它显示了某个时间段内每步的计数。一旦步数超过65535,它将从0重新开始计数等等。但是,由于并非所有数据集都具有65535计数(有些在时间段内走了几步,例如从65530到5),因此我找不到一个好的方法来处理每个6553x后面的0,使其变为65536等等。

step    realstep
65531     65531
65533     65533
65534     65534
2         65538
4         65540

我试图计算真实步数以获取它们之间的差异(例如每分钟步数)。

我从样本数据中推断出,实际步长的典型增量要比最大计数器值安全得多,因此.diff().lt(0)是一种可靠的方法来查找重置。如果这不是必然的情况,请告诉我,因为这会变得更加棘手。 - ALollz
1
它完美地运行了,非常感谢! - npm
@ALollz 不确定是否需要开新问题,但是当我浏览数百个数据集时,我意识到一些“步骤”值就像你的示例一样(65534-2-4-65434),但实际上并不是这样(可能是传感器噪声),因此它被重置得太多了。我正在尝试找出如何删除那种行。 - npm
1个回答

4

查找diff为负数时的重置位置,并将超过该位置的所有行添加最大计数器值(由于从0开始计数,因此为65536)。如果它重置多次,它将是灵活的(我添加了一些额外数据)。

df['real_step'] = df.step + df.step.diff(1).lt(0).cumsum()*65536

    step  real_step
0  65531      65531
1  65533      65533
2  65534      65534
3      2      65538
4      4      65540
5  65434     130970
6      2     131074
7      4     131076

2
太好了,我在想这里应该应用什么逻辑。已经学会了。谢谢。+1 - anky
@ALollz 我不确定是否需要开新问题,但在处理数百个数据集时,我意识到有些“步骤”值与您的示例非常相似(65534 - 2 - 4 - 65434),但实际上并非如此(可能是传感器噪声),因此它被频繁重置。我正在尝试找出如何删除这种行。 - npm
@npm 我认为最好提出一个新问题。但我认为这可能是无法解决的。例如,想象一下你的数据是2、4、6、8、10... 有人可能会认为这些是实时步骤,并且是2、4、6、8、10。但如果你采样非常缓慢,这些也可能是2、65540、131078(即你每隔65538秒采样一次)。没有更多的知识,无法区分这两者,而且两者都在逻辑上是可以接受的。 - ALollz
1
@ALoIlz同意了。谢谢,我会寻找其他使用数据的可能性! - npm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接