问题描述
我正在尝试通过添加固定值来将值投影到一列中。本质上,这就像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
解决方法
让我们尝试ffill
与cumsum
创建增加步骤
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的索引值