2016-03-31 9 views
1

私は、テーブルの各行に対して、別のテーブルの行を繰り返し処理し、両方の値を更新する必要のあるプロジェクトを持っています。変更は、次の反復に固執する必要があります。それをする最善の方法は何ですか?データフレーム値を更新する方法

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

答えて

5

は、私が何をしたいことは、これはあなたが望むものであるならば大文字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() 
+0

これは間違いなく役立ちます。私はあなたをアップアップするのに十分な評判を持っていたと思う。 – Mateyobi

+0

これがあなたの質問に答える場合は、投票矢印の下の緑色のチェックボックスをクリックすることができます。もっと良い答えを出さないなら=)。 – John

+0

あなたにチェックが入っています。私のポストをupvoteしてください! – Mateyobi

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'