gpt4 book ai didi

python - 基于同一列的先前值对列值进行矢量化计算?

转载 作者:太空狗 更新时间:2023-10-30 00:54:47 24 4
gpt4 key购买 nike

我有一个包含两列 AB 的 pandas 数据框,如下所示。

我想要一个矢量化解决方案来创建一个新列 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

这是 solution使用 for 循环:

df['C'] = df['A']

for i in range(1, len(df)):
df['C'][i] = df['C'][i-1] - df['A'][i] + df['B'][i]

>>> df
A B C
0 10 0 10
1 2 1 9
2 3 2 8
3 4 3 7
4 5 4 6
5 6 5 5

... 完成这项工作。

但由于与向量化计算相比循环速度较慢,我想要在 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]。您可以先从 AB 获取 delta,然后...
  • 计算 delta 的累加和(加上 C[0])以获得完整的 C

代码如下:

delta = df['B'] - df['A']
delta[0] = 0
df['C'] = df.loc[0, 'A'] + delta.cumsum()

print df
A B C
0 10 0 10
1 2 1 9
2 3 2 8
3 4 3 7
4 5 4 6
5 6 5 5

关于python - 基于同一列的先前值对列值进行矢量化计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com