如何使用 Pandas 基于另一列值累计添加或减去值?

How can I cumulatively add or subtract values based on another column values using Pandas?

我在下面有一个数据框,它显示了基于秒的电压输出。 v_out 值基于 +/- 0.05 厘米的位移。

因此,当 v_out 变得更正时,与上一个 v_out 值相比存在正位移。当 v_out 变得更负时,位移在 - 方向。

我有初始的 df,我想添加一个 sign 列,根据之前的 v_out 值判断 v_out 是正数还是负数。而且,我想要一个 cumulative 列来跟踪添加的 运行 总 sign 列。

初始df

     secs     v_out
0     0.0 -1.179100
1    15.0 -1.179100
2    18.0 -1.179200
3    33.0 -1.181800
4    48.0  0.029461

我想要的

     secs     v_out  sign  cumul
0     0.0 -1.179100  0.00  0.00
1    15.0 -1.179100  0.00  0.00
2    18.0 -1.179200 -0.05 -0.05
3    33.0 -1.181800 -0.05 -0.10
4    48.0  0.029461  0.05 -0.05

查看 _lagged 值的方法被命名为 shift,然后我们使用 if-else 检查值是正数、负数还是零构造。

因此,首先我们构建列 sign。逻辑可以打包成1行。

df['sign'] = (df.v_out - df.v_out.shift()).apply(lambda x: 0.05 if x > 0 else -0.05 if x < 0 else 0)

顺便说一句,我经常以交互方式编写这段代码,但建议将其分成几行,这样如果将其保存在文件中,逻辑更容易理解)

然后,可以通过应用cumsum方法来制作cumul列。

df['cumul'] = df.sign.cumsum()

最终的 df 如下所示:

   secs     v_out  sign  cumul                                                                                      
0   0.0 -1.179100  0.00   0.00                                                                                          
1  15.0 -1.179100  0.00   0.00                                                                                          
2  18.0 -1.179200 -0.05  -0.05                                                                                          
3  33.0 -1.181800 -0.05  -0.10                                                                                          
4  48.0  0.029461  0.05  -0.05`