一种更新 pandas DataFrames 中的单元格的干净有效的方法

A clean and efficient way to update cells in pandas DataFrames

我正在寻找一种更简洁的方法来实现以下目标:

我有一个包含某些列的 DataFrame,如果有新信息到达,我想更新这些列。 pandas DataFrame(来自 CSV 文件)的 "new information" 可以有更多或更少的行,但是,我只对添加

感兴趣

原始数据帧

具有新信息的 DataFrame

(注意此处缺少的名称“c”以及名称“a”在 "status" 中的更改)

现在,我写了下面的"inconvenient"代码来用新信息更新原始DataFrame

根据 "name" 列更新 "status" 列

for idx,row in df_base.iterrows():
    if not df_upd[df_upd['name'] == row['name']].empty:
        df_base.loc[idx, 'status'] = df_upd.loc[df_upd['name'] == row['name'], 'status'].values

它完全达到了我想要的效果,但它看起来既不美观也不高效,我希望有更简洁的方法。我尝试了 pd.merge 方法,但是,问题是它会添加新列而不是 "updating" 该列中的单元格。

pd.merge(left=df_base, right=df_upd, on=['name'], how='left')

我期待着您的提示和想法。

您可以 set_index("name") 然后调用 .update:

>>> df_base = df_base.set_index("name")
>>> df_upd = df_upd.set_index("name")
>>> df_base.update(df_upd)
>>> df_base
      status
name        
a          0
b          1
c          0
d          1

更一般地说,您可以将索引设置为任何合适的值,更新,然后根据需要重新设置。