【问题标题】:Panda dataframe conditional change熊猫数据框条件更改
【发布时间】:2019-06-21 01:56:48
【问题描述】:

我正在处理 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 不确定我是否必须提出新问题,但是当我通过数百个数据集时,我意识到一些“步骤”值就像你的例子一样 (65534 - 2 - 4 - 65434),虽然它实际上不是(可能是来自传感器的噪音),因此它被重置太多。我正在想办法现在如何删除这种行。

标签: python pandas dataframe conditional


【解决方案1】:

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

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

【讨论】:

  • 太棒了,我想知道这里应用的逻辑是什么。学到了。谢谢。 +1
  • @ALollz 不确定我是否必须提出新问题,但当我通过数百个数据集时,我意识到一些“步骤”值就像你的例子一样 (65534 - 2 - 4 - 65434),虽然它实际上不是(可能是来自传感器的噪音),因此它被重置太多。我正在想办法现在如何删除这种行。
  • @npm 我认为可能最适合提出新问题。但我认为这可能无法解决。例如,假设您的数据是 2,4,6,8,10... 可以假设这些是实时时间步长并且是 2,4,6,8,10。但是如果您的采样速度非常慢,那么这些也可能是 2, 65540,131078(即您每 65538 秒采样一次)。如果没有更多的知识,就不可能区分这两者,而且两者在逻辑上都是可以接受的。
  • @ALoIlz 同意这一点。谢谢,我会寻找其他使用数据的可能性!
猜你喜欢
  • 2023-02-21
  • 2023-02-02
  • 1970-01-01
  • 2019-12-21
  • 2016-12-11
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
相关资源
最近更新 更多