行ごとに反復しながらパンダのデータフレームを更新する 質問する

行ごとに反復しながらパンダのデータフレームを更新する 質問する

次のようなパンダデータフレームがあります(かなり大きいものです)

           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 ループを保持しました。

おすすめ記事