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

Pandas如何匹配两DataFrame的serial#列替换df1指定列值

实现方案

直接使用pandas内置的isin()方法做字段匹配,无需额外合并表,代码简洁执行效率高,核心实现仅需1行:

# 核心处理逻辑
df1.loc[df1['serial#'].isin(df2['serial#']), 'Status'] = 'Reporting'

完整可运行测试代码如下:

import pandas as pd

# 构造测试数据
d = {'serial#': ['AAA111', 'BBB222', 'CCC333', 'DDD444', 'EEE555'], 
'Status': ['Compatible', 'Compatible', 'Not compatible', 'Not compatible', 'Not compatible']}
df1 = pd.DataFrame(data=d)

d2 = {'serial#': ['DDD444', 'EEE555'], 'Model': ['printer', 'printer']}
df2 = pd.DataFrame(data=d2)

# 执行替换逻辑
df1.loc[df1['serial#'].isin(df2['serial#']), 'Status'] = 'Reporting'

# 打印结果验证
print(df1)

运行后输出结果和预期完全一致:

serial#          Status
0  AAA111      Compatible
1  BBB222      Compatible
2  CCC333  Not compatible
3  DDD444       Reporting
4  EEE555       Reporting

逻辑说明

  • df1['serial#'].isin(df2['serial#'])会逐行生成布尔判断结果:如果当前行的serial#存在于df2的serial#列中,返回True,否则返回False
  • df.loc[行筛选条件, 列名]是pandas的精准定位语法,只会修改符合筛选条件的行对应的Status列值,其余行的原有数据完全不受影响

处理百万行级别的大数据量时,可以先把df2的serial#转为集合再传入isin方法,能大幅提升匹配速度,写法为:df1.loc[df1['serial#'].isin(set(df2['serial#'])), 'Status'] = 'Reporting'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:42:06