在逐行迭代时更新熊猫中的数据框

新手上路,请多包涵

我有一个看起来像这样的熊猫数据框(它很大)

            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

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

原文由 AMM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 207
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 循环,以防您需要此处未显示的内容的行值。

原文由 rakke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题