我有一个项目,对于表中的每一行,我需要迭代另一个表中的行并更新两者中的值。这些变化需要坚持下一次迭代。最好的方法是什么?
for invoice_line in invoices.itertuples():
qty = invoice_line.SHIP_QTY
for receipt_line in receipts[receipts.SKU == invoice_line.SKU].itertuples():
if qty > receipt_line.REC_QTY:
receipts.set_value(receipt_line.index,'REC_QTY',0)
qty = qty - receipt_line.REC_QTY
else:
receipts.set_value(receipt_line.index,'REC_QTY', receipt_line.REC_QTY - qty)
qty = 0
recd = receipt_line.REC_DATE
if qty < 1:break
invoices.set_value(invoice_line.index,'REC_DATE',recd)
set_value似乎不起作用。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
for row in df.itertuples():
df.set_value(row.index,'test',row.D)
print df.head()
答案 0 :(得分:6)
我认为你想要的是一个大写的Index
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
for row in df.itertuples():
df.set_value(row.Index,'test',row.D)
print df.head()
答案 1 :(得分:0)
不是100%确定这是否是你想要的,但我认为你试图通过列表循环并更新数据帧中单元格的值。其语法是:
for ix in df.index:
df.loc[ix, 'Test'] = 'My New Value'
其中ix是行位置,'Test'是要更新的列名。如果你需要添加更多逻辑,你可以尝试像:
for ix in df.index:
row = df.loc[ix]
if row.myVariable < 100:
df.loc[ix, 'SomeColumn'] = 'Less than ahundred'
else:
df.loc[ix, 'SomeColumn'] = 'ahundred or more'