Python Pandas使用先前的行值更新行中的值

问题描述 投票:0回答:3

我必须使用先行值来计算新值。我有很多行,我不想使用循环,因为这需要花费很多时间,我尝试了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':

  • C的第一值是A的第一值
  • C的第二个值,取C的第一个值并加B(第二个),
  • C的第三值,取C的第二个值,然后加上B(第三个),以获得类似的结果(最终结果)

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

我真的不想使用循环或应用,所以如果我真的想知道另一种快速方法。

非常感谢

python pandas diff shift
3个回答
2
投票
您正在寻找一个累加除法,因此可以通过.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


1
投票
要添加到现有答案中:如果效率很重要,我认为积累往往会更快(尽管它会增加另一个依赖性):

from itertools import accumulate df['C'] = df['A'].values[0] + list(accumulate(np.append(0, df['B'].values[1:])))


0
投票
使用Series.where +Series.where得到累积除法:

Series.cumprod


0
投票
使用Series.where +Series.where得到累积除法:

Series.cumprod

© www.soinside.com 2019 - 2024. All rights reserved.