Pandas逐行对比两列数据 移除initial_data匹配词生成新列
实现方案
核心逻辑:匹配阶段忽略词汇大小写,保留原始词汇的大小写、语序与格式,仅删除匹配成功的词汇,自动处理词汇附带的标点符号。
import pandas as pd import string # 构造示例DataFrame df = [['HJC, casco helmets integral de moto', 'HJC Helmets'], ['Silverstone Technology Concentrador de Datos ', 'SilverStone Technology'], ['Urban Leather UR-52 Chaqueta de Cuero', 'URBAN 5884']] df = pd.DataFrame(df, columns = ['initial_data', 'additional_data']) def filter_match(row): # 将additional_data词汇转小写生成匹配集合,忽略大小写差异 add_words = set(word.lower() for word in row['additional_data'].split()) initial_tokens = row['initial_data'].split() res_tokens = [] for token in initial_tokens: # 去除token首尾标点后转小写用于匹配,不修改原始token格式 clean_token = token.strip(string.punctuation).lower() if clean_token not in add_words: res_tokens.append(token) # 拼接结果并清理首尾多余空格 return ' '.join(res_tokens).strip() # 逐行应用函数生成新列 df['new_data'] = df.apply(filter_match, axis=1)
输出验证
print(df['new_data']) 0 casco integral de moto 1 Concentrador de Datos 2 Leather UR-52 Chaqueta de Cuero Name: new_data, dtype: object
完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者Cris
相关产品推荐
相关产品推荐

