如何使用 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`
我在下面有一个数据框,它显示了基于秒的电压输出。 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`