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,否则返回Falsedf.loc[行筛选条件, 列名]是pandas的精准定位语法,只会修改符合筛选条件的行对应的Status列值,其余行的原有数据完全不受影响
处理百万行级别的大数据量时,可以先把df2的serial#转为集合再传入isin方法,能大幅提升匹配速度,写法为:
df1.loc[df1['serial#'].isin(set(df2['serial#'])), 'Status'] = 'Reporting'
内容的提问来源于stack exchange,提问作者Daniel Cunha
相关产品推荐
相关产品推荐

