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

如何使用Pandas基于某列值删除另一列中的对应字符?

问题解决:根据指定字符删除DataFrame列中对应内容

原始DataFrame

import pandas as pd

df = pd.DataFrame([['ABCD','B'],['ABFJS','A,J'],['DGQEX','']],
                   index = [1,2,3],columns=['A','B'])

需求说明

  • 第一行:根据B列的"B",删除A列"ABCD"中的"B",保留"ACD"
  • 第二行:根据B列的"A,J",删除A列"ABFJS"中的"A"和"J",保留"BFS"
  • 第三行:B列为空,A列保持不变

问题分析

你之前的代码返回[BFJS, ABFS],核心原因是每次替换都基于原始的A列字符串,而非前一次替换后的结果。比如第二行先把"A"替换成""得到"BFJS",再把"J"替换成""时又用了原始的"ABFJS",最终得到两个中间值,而非叠加替换后的最终结果。

正确实现方法

方法一:逐步叠加替换

在apply中对每行的A列字符串,依次用B列的每个字符进行替换,每次替换都基于上一次的结果:

def remove_chars(row):
    result = row['A']
    # 过滤掉B列拆分后产生的空字符
    chars_to_remove = [c for c in str(row['B']).split(',') if c]
    for c in chars_to_remove:
        result = result.replace(c, '')
    return result

df['A_cleaned'] = df.apply(remove_chars, axis=1)

运行后df['A_cleaned']的结果为:

1    ACD
2    BFS
3    DGQEX
Name: A_cleaned, dtype: object

方法二:正则表达式批量替换

把B列的字符拼接成正则匹配模式,一次性替换所有目标字符,效率更高:

import re

def remove_chars_regex(row):
    chars = str(row['B']).replace(',', '')
    if not chars:
        return row['A']
    # 生成匹配任意目标字符的正则模式,转义特殊字符避免出错
    pattern = re.compile(f'[{"".join(re.escape(c) for c in chars)}]')
    return pattern.sub('', row['A'])

df['A_cleaned'] = df.apply(remove_chars_regex, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:15:35