for循环不将参数传递到下一次迭代



我写了一些东西来计算储量,在下一次迭代中需要考虑已经预留的数量。唯一的问题是参数不是;t在下一次迭代中使用。输出中确实包含计算,但参数没有结转。关于如何解决这个问题,有什么建议吗?随时指出代码中任何东西的隐蔽性,仍在学习

import pandas as pd
df=pd.read_csv('test_file.csv')
final_reserve = []

for i in range(len(df)):
#If it's the first row or a new sku set the reserved to 0
if i == 0 or df.loc[i]['SKU'] == df.loc[i-1]['SKU']:
reserved = 0
#calculate reserve
to_reserve = df.loc[i]['ON_HAND'] - (df.loc[i]['SALES']*2) - df.loc[i]['ALREADY_RESERVED']
final_reserve.append(to_reserve)
#add to the reserved parameter
reserved += to_reserve
else:
#if it's not the first row or a new sku take the already reserved units into account in the calculation
to_reserve = df.loc[i]['ON_HAND'] - (df.loc[i]['SALES']*2) - df.loc[i]['ALREADY_RESERVED']-reserved
final_reserve.append(to_reserve)
reserved += to_reserve
df['to_reserve'] = final_reserve
df.head()

正如下面显示的输出所示,在第二行,它达到了500,应该减去第一行已经保留的300输出储备

我刚刚根据for循环中的第一条注释快速查看了您的问题:

#If it's the first row or a new sku set the reserved to 0

您想将下一行更改为:

if i == 0 or df.loc[i]['SKU'] <> df.loc[i-1]['SKU']:

也就是说,将第二个==运算符更改为<gt;操作人员

目前,如果评估的SKU与前一个匹配,则您的代码将保留的重置为0,而不是如果它是新的SKU。

最新更新