如何更新数据框值

时间:2016-03-31 21:25:38

标签: python python-2.7 pandas

我有一个项目,对于表中的每一行,我需要迭代另一个表中的行并更新两者中的值。这些变化需要坚持下一次迭代。最好的方法是什么?

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()

2 个答案:

答案 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'