我必须使用先行值来计算新值。我有很多行,我不想使用循环,因为这需要花费很多时间,我尝试了shift,但是我认为这样做没有帮助,或者我可能不知道如何使用它。
这里是关于我想做什么的小例子。
我有一个数据框
df = pd.DataFrame({'A': [4,2,3,2], 'B': [2, 3,4,5]})
In [273]: df
Out[273]:
A B
0 4 2
1 2 3
2 3 4
3 2 5
我想创建新列'C':
In [273]: df
Out[273]:
A B C
0 4 2 4.0
1 2 3 7.0
2 3 4 11.0
3 2 5 16.0
我真的不想使用循环或应用,所以如果我真的想知道另一种快速方法。
非常感谢
.cumprod()
方法获得累加prod方法的逆。唯一的技巧是您要以列A的第一个值或B开头,因此您需要乘以A的第一个值和B的第一个值
df['C'] = 1/df['B'].cumprod()*df.loc[0,'B'] * df.loc[0,'A']
# A B C
#0 4 2 4.000000
#1 2 3 1.333333
#2 3 4 0.333333
#3 2 5 0.066667
from itertools import accumulate
df['C'] = df['A'].values[0] + list(accumulate(np.append(0, df['B'].values[1:])))