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

如何用Python Pandas逐行更新DataFrame?MSSQL场景需求求助

Pandas更新DataFrame的DIAGCODE字段方案

嘿,我来帮你搞定这个Pandas更新的问题!首先得说,尽量别用逐行循环——Pandas天生是为向量化操作设计的,逐行跑不仅慢,代码还啰嗦。根据你的场景,分两种常见情况给你方案:

情况1:两个DataFrame行顺序完全对应

如果dp的每一行刚好对应data的同一行(比如都是按相同的顺序从数据库读取的),那直接赋值就完事儿了,简单粗暴又高效:

# 直接把dp的DIAGCODE列覆盖到data的对应字段
data['DIAGCODE'] = dp['DIAGCODE']

情况2:需要通过共同键匹配更新(更常见的场景)

如果两个表是通过某个唯一标识列(比如患者ID、记录ID)关联的,那得用匹配映射的方式,举个例子,假设两个DataFrame都有PATIENT_ID这个共同键:

方法A:用merge合并后替换

先把dp里的键列和DIAGCODE列合并到data,再替换原字段:

# 只保留dp里需要的键列和DIAGCODE,避免合并冗余列
merged_df = data.merge(
    dp[['PATIENT_ID', 'DIAGCODE']],
    on='PATIENT_ID',
    how='left',  # 保留data的所有行,即使dp里没有匹配项
    suffixes=('_old', '')  # 区分原DIAGCODE和新DIAGCODE
)
# 把合并后的新DIAGCODE赋值回原data
data['DIAGCODE'] = merged_df['DIAGCODE']
# 如果有匹配不到的行,想保留原来的DIAGCODE值,可以这么写:
# data['DIAGCODE'] = merged_df['DIAGCODE'].fillna(data['DIAGCODE'])

方法B:用字典映射(更轻量)

把dp转换成键到DIAGCODE的字典,再用map函数快速映射:

# 创建PATIENT_ID到DIAGCODE的映射字典
diag_mapping = dp.set_index('PATIENT_ID')['DIAGCODE'].to_dict()
# 把data里的PATIENT_ID映射成对应的DIAGCODE
data['DIAGCODE'] = data['PATIENT_ID'].map(diag_mapping)
# 同样,想保留原字段的空值匹配项,加个fillna:
# data['DIAGCODE'] = data['PATIENT_ID'].map(diag_mapping).fillna(data['DIAGCODE'])

为啥不推荐逐行循环?

比如你可能试过for i in range(len(data))这种写法,当数据量上千上万的时候,这种方法的速度会比向量化操作慢几十甚至上百倍,完全没必要跟自己的电脑较劲😎

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:15