我有一个pandas数据帧,有两列A
,B
,如下所示。在
我需要一个向量化的解决方案来创建一个新的列C,其中C[i] = C[i-1] - A[i] + B[i]
。在
df = pd.DataFrame(data={'A': [10, 2, 3, 4, 5, 6], 'B': [0, 1, 2, 3, 4, 5]})
>>> df
A B
0 10 0
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
下面是使用for循环的solution:
^{pr2}$。。。它起作用了。在
但是,由于与矢量化计算相比,循环速度较慢,我需要在pandas中对此采用矢量化的解决方案:
我试着像这样使用shift()
方法:
df['C'] = df['C'].shift(1).fillna(df['A']) - df['A'] + df['B']
但这没有帮助,因为移位的C列没有随着计算进行更新。它保持其原始价值:
>>> df['C'].shift(1).fillna(df['A'])
0 10
1 10
2 2
3 3
4 4
5 5
这就产生了一个错误的结果。在
这可以矢量化,因为:
delta[i] = C[i] - C[i-1] = -A[i] +B[i]
。你可以先从A
和{delta
(加上C[0]
)的累计和,得到完整的C
代码如下:
相关问题 更多 >
编程相关推荐