You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速简便地对Pandas DataFrame执行AddOrUpdate操作?

实现Pandas DataFrame的AddOrUpdate(添加/更新)操作

需求说明

针对指定DataFrame完成两类操作:

  • 更新已有索引行的指定列值
  • 添加原始DataFrame中不存在的新索引行

实现代码

1. 定义原始数据与变更列表

import pandas as pd

# 原始DataFrame
df = pd.DataFrame([
        {'A':'a1','B':'b1','C':'c1'},
        {'A':'a3','B':'b2','C':'c2'},
        {'A':'a3','B':'b3','C':'c3'},
    ])

# 变更列表:id对应目标行索引
changes = [
    {'id':0, 'A':'aNEW','C':'cNEW'},
    {'id':2, 'B':'bNEW'},
    {'id':3, 'A':'aNEW','C':'cNEW'},
]

2. 核心实现逻辑

# 把变更列表转为以id为索引的DataFrame
changes_df = pd.DataFrame(changes).set_index('id')

# 更新已有行:仅替换原始DataFrame中存在的索引行的指定列
df.update(changes_df.reindex(df.index))

# 添加新行:筛选出变更中未在原始索引里的行,追加到DataFrame
new_rows = changes_df[~changes_df.index.isin(df.index)]
df = pd.concat([df, new_rows]).sort_index()

3. 封装成自定义方法(可选)

如果需要类似df.UpdateOrAdd(changes)的便捷调用方式,可封装成函数:

def update_or_add(df, changes):
    changes_df = pd.DataFrame(changes).set_index('id')
    df.update(changes_df.reindex(df.index))
    new_rows = changes_df[~changes_df.index.isin(df.index)]
    return pd.concat([df, new_rows]).sort_index()

# 调用示例
df = update_or_add(df, changes)

最终结果

执行后得到目标DataFrame:

A     B     C
0  aNEW    b1  cNEW
1    a3    b2    c2
2    a3  bNEW    c3
3  aNEW  None  cNEW

关键说明

  • df.update():原地更新已有行,仅替换非空值,保留原始行未指定的列数据
  • 索引筛选+concat:确保仅添加原始DataFrame中不存在的新行
  • sort_index:保证最终行顺序按索引升序排列

内容的提问来源于stack exchange,提问作者ljilekor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:35:32