通过将固定变量添加到先前值来更新pandas df列中的值

问题描述

我正在尝试通过添加固定值来将值投影到一列中。本质上,这就像Excel中的工作表,其中在单元格a1中有一个值,在单元格b1中有一个固定值,而a2将是= sum(a1 + $ b $ 1)并将其向下拖动。在熊猫中似乎很简单,也许涉及.cumsum,但是我还没有找到一种方法来获得理想的结果。

这是我的数据框。

df = pd.DataFrame({"date_column" : ["2020-08-16","2020-08-17","2020-08-18","2020-08-19","2020-08-20","2020-08-21","2020-08-22","2020-08-23","2020-08-24","2020-08-25" ],"purchases" : [23,'','']})

df
date_column    purchases
0   2020-08-16     23
1   2020-08-17    
2   2020-08-18    
3   2020-08-19    
4   2020-08-20    
5   2020-08-21    
6   2020-08-22    
7   2020-08-23    
8   2020-08-24    
9   2020-08-25  

我分别计算了前两周的变量avg_increase。

avg_increase
2.5000000

我想将avg_increase值添加到采购列中的初始值,然后将avg_increase添加到该值,依此类推。所需的输出是:

date_column    purchases
0   2020-08-16     23
1   2020-08-17    25.5
2   2020-08-18    28
3   2020-08-19    30.5
4   2020-08-20    33
5   2020-08-21    35.5
6   2020-08-22    38
7   2020-08-23    40.5
8   2020-08-24    43
9   2020-08-25    45.5

解决方法

让我们尝试ffillcumsum创建增加步骤

df.purchases = df.purchases.where(df.purchases!='').ffill()+df.purchases.eq('').cumsum()*2.5
Out[190]: 
0    23.0
1    25.5
2    28.0
3    30.5
4    33.0
5    35.5
6    38.0
7    40.5
8    43.0
9    45.5
Name: purchases,dtype: float64
,

使用有序索引0..N的替代解决方案:

df.purchases = df.loc[0,"purchases"]+df.index.values*2.5

结果:

  date_column  purchases
0  2020-08-16       23.0
1  2020-08-17       25.5
2  2020-08-18       28.0
3  2020-08-19       30.5
4  2020-08-20       33.0
5  2020-08-21       35.5
6  2020-08-22       38.0
7  2020-08-23       40.5
8  2020-08-24       43.0
9  2020-08-25       45.5

只需获取purchases的第一个值,然后添加乘以2.5的索引值