次のようなパンダデータフレームがあります(かなり大きいものです)
date exer exp ifor mat
1092 2014-03-17 American M 528.205 2014-04-19
1093 2014-03-17 American M 528.205 2014-04-19
1094 2014-03-17 American M 528.205 2014-04-19
1095 2014-03-17 American M 528.205 2014-04-19
1096 2014-03-17 American M 528.205 2014-05-17
ここで、行ごとに反復処理を行い、各行を処理する際に、ifor
条件に応じて各行の値が変化する可能性があるため、別のデータフレームを検索する必要があります。
さて、これを反復しながらどのように更新すればよいでしょうか。いくつか試してみましたが、どれもうまくいきませんでした。
for i, row in df.iterrows():
if <something>:
row['ifor'] = x
else:
row['ifor'] = y
df.ix[i]['ifor'] = x
これらのアプローチはどれも機能しないようです。データフレーム内の値が更新されていないようです。
ベストアンサー1
以下を使用できますdf.at
:
for i, row in df.iterrows():
ifor_val = something
if <condition>:
ifor_val = something_else
df.at[i,'ifor'] = ifor_val
0.21.0より前のバージョンの場合は、以下を使用しますdf.set_value
。
for i, row in df.iterrows():
ifor_val = something
if <condition>:
ifor_val = something_else
df.set_value(i,'ifor',ifor_val)
行の値が必要ない場合は、 のインデックスを単純に反復処理することもできますdf
が、ここに示されていない何かのために行の値が必要な場合に備えて、元の for ループを保持しました。