for product in df['Product'].unique(): product_df = df[df['Product'] == product] quantity = 0 cost = 0 for index, row in product_df.iterrows(): if row['Quantity'] > 0: if quantity == 0: cost = row['Cost'] elif row['Quantity'] <= quantity: cost = ((quantity * cost) + (row['Quantity'] * row['Cost'])) / (quantity + row['Quantity']) else: cost = row['Cost'] fifo_df = fifo_df.append({'Product': row['Product'], 'Date': row['Date'], 'Quantity': row['Quantity'], 'Cost': cost}, ignore_index=True) quantity += row['Quantity'],以上代码是否正确
时间: 2023-07-15 15:10:19 浏览: 39
这段代码存在一些问题,首先在第一次循环中,当 `quantity == 0` 时,`cost = row['Cost']`,但是并没有将 `quantity` 的值更新为当前行的 `Quantity` 值,导致后续计算成本时会出现错误。其次,`fifo_df` 在循环内部被重新赋值,每次迭代都会创建一个新的 DataFrame,这样会导致每次迭代后的结果都被覆盖,最终只会得到最后一次迭代的结果。
以下是修改后的代码:
```
fifo_df = pd.DataFrame(columns=['Product', 'Date', 'Quantity', 'Cost'])
for product in df['Product'].unique():
product_df = df[df['Product'] == product]
quantity = 0
cost = 0
for index, row in product_df.iterrows():
if row['Quantity'] > 0:
if quantity == 0:
cost = row['Cost']
quantity = row['Quantity']
elif row['Quantity'] <= quantity:
cost = ((quantity * cost) + (row['Quantity'] * row['Cost'])) / (quantity + row['Quantity'])
quantity += row['Quantity']
else:
cost = row['Cost']
quantity = row['Quantity']
fifo_df = fifo_df.append({'Product': row['Product'], 'Date': row['Date'], 'Quantity': row['Quantity'], 'Cost': cost}, ignore_index=True)
```
修改后的代码中,我们在第一次循环中添加了 `quantity = row['Quantity']` 语句,以更新 `quantity` 的值。同时,我们将 `fifo_df` 的初始化放到了循环外部,每次迭代都将新的数据添加到 DataFrame 中。在计算成本时,我们添加了一个判断条件,当 `row['Quantity'] <= quantity` 时,更新 `cost` 和 `quantity` 的值,否则直接使用当前行的 `Cost` 和 `Quantity` 更新 `cost` 和 `quantity` 的值。