You need to enable JavaScript to run this app. 如何基于Pandas DataFrame两列文本生成对应差异内容列
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas DataFrame两列文本生成对应差异内容列

Pandas DataFrame 整列批量计算文本差异实现方案

核心思路

把单文本对比逻辑封装为可接收两个字符串参数的自定义函数,通过DataFrame的apply方法逐行调用即可实现整列批量计算。

完整实现代码

1. 导入依赖库

import pandas as pd
import difflib

2. 封装文本差异计算函数

def calculate_diff(text1: str, text2: str) -> str:
    differ = difflib.Differ()
    # 字符级细粒度对比,如需单词级对比可改为 text1.split() / text2.split()
    diff_result = differ.compare(list(text1), list(text2))
    
    del_content = []
    add_content = []
    for item in diff_result:
        # - 开头为Text1有、Text2无的内容
        if item.startswith('- '):
            del_content.append(item[2:])
        # + 开头为Text2有、Text1无的内容
        elif item.startswith('+ '):
            add_content.append(item[2:])
    
    # 输出规则和示例保持一致:优先返回删除内容,无删除内容则返回新增内容
    if del_content:
        return ''.join(del_content).strip()
    elif add_content:
        return ''.join(add_content).strip()
    return ''

3. 批量应用到DataFrame

# 构造测试数据,可替换为你读取Excel/CSV的逻辑
df = pd.DataFrame({
    'Text1': ['This is Mango. This is Banana', 'This is Mango.'],
    'Text2': ['This is Banana', 'This is Mango, Banana']
})

# 逐行计算生成Change列
df['Change'] = df.apply(lambda row: calculate_diff(row['Text1'], row['Text2']), axis=1)

可选优化

  • 单词级对比:将函数内的list(text1)改为text1.split()、list(text2)改为text2.split(),返回时改为' '.join(xxx)即可
  • 大体积数据提速:安装swifter库后,将df.apply替换为df.swifter.apply可自动调用多核并行计算,大幅提升处理速度
  • 差异结果标记:如需区分新增/删除内容,可调整返回逻辑,比如返回f"删除:{''.join(del_content)} 新增:{''.join(add_content)}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:45:04