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

Python:基于条件用另一DataFrame的值替换列中指定值

解决方案:根据Ticket匹配替换DataFrame中的ERROR值

示例数据

先定义符合场景的两个DataFrame:

import pandas as pd

# 存在ERROR值的df1
df1 = pd.DataFrame({
    'Ticket': [3453, 1234, 2364, 5678],
    'Client': ['ERROR', 'Google', 'ERROR', 'Microsoft'],
    'OtherCol': ['A', 'B', 'C', 'D']
})

# 存储正确Ticket-Client映射的df2
df2 = pd.DataFrame({
    'Ticket': [3453, 2364, 9999],
    'Client': ['Alphabet', 'AMD', 'Apple']
})

方法1:映射字典+mask替换

先把df2转成Ticket到Client的映射字典,再针对性替换df1里的ERROR值:

# 构建Ticket与Client的映射字典
ticket_client_map = df2.set_index('Ticket')['Client'].to_dict()

# 仅替换Client列中为'ERROR'的行,用对应Ticket的Client值
df1['Client'] = df1['Client'].mask(df1['Client'] == 'ERROR', df1['Ticket'].map(ticket_client_map))

# 如果需要保留未匹配到的ERROR(避免变成NaN),加fillna
df1['Client'] = df1['Client'].mask(df1['Client'] == 'ERROR', df1['Ticket'].map(ticket_client_map)).fillna(df1['Client'])

方法2:合并DataFrame+combine_first

通过合并两个表,再优先保留原有效值,补充映射值:

# 按Ticket合并,只引入df2的Client列
merged_df = df1.merge(df2[['Ticket', 'Client']], on='Ticket', how='left', suffixes=('', '_correct'))

# 用combine_first:原Client不是ERROR就留着,是ERROR就用df2的对应值
df1['Client'] = merged_df['Client'].combine_first(merged_df['Client_correct'])

最终效果

处理后的df1会变成:

Ticket     Client OtherCol
0    3453  Alphabet        A
1    1234    Google        B
2    2364      AMD        C
3    5678  Microsoft        D

内容的提问来源于stack exchange,提问作者exenlediatán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:18:19