在逐行迭代的同时更新pandas数据框

我有一个pandas数据框,看起来像这样(它是一个很大的)

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在每行的值可以改变,取决于一些条件,我需要查找另一个dataframe。

现在,我如何更新这个迭代。 试了几件事,没有一个工作。

 for i, row in df.iterrows(): if <something>: row['ifor'] = x else: row['ifor'] = y df.ix[i]['ifor'] = x 

这些方法似乎都不起作用。 我没有看到在数据框中更新的值。

您可以使用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循环,以防你需要行值在这里没有显示的东西。

您应该通过df.ix[i, 'exp']=Xdf.loc[i, 'exp']=X来代替df.ix[i]['ifor'] = x

否则,你正在研究一个观点,并应该得到一个变暖:

-c:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead

但当然,循环可能应该更好地被一些vector化algorithm所取代,以充分利用DataFrame作为@Phillip Cloud的build议。