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

如何从bc_keywords列移除与ab_keywords列重复的关键词?

问题描述

现有如下数据表:

IDab_keywordsbc_keywords
ABL345ryzen,ryzen 7x,ryzen 5800,ryzen 7xryzen,ryzen 71x,ryzen 5900,best
ABL448ryzen 5800 7x,ryzen 8x,cpu,ryzen 5800ryzen 5900 71x,ryzen 8x,processor,best

需求为移除bc_keywords列中已在ab_keywords列出现过的关键词,生成bc_new列(可选生成duplis列记录重复关键词),预期输出:

IDab_keywordsbc_keywordsduplisbc_new
ABL345ryzen,ryzen 7x,ryzen 5800,ryzen 7xryzen,ryzen 71x,ryzen 5900,bestryzenryzen 71x,ryzen 5900,best
ABL448ryzen 5800 7x,ryzen 8x,cpu,ryzen 5800ryzen 5900 71x,ryzen 8x,processor,bestryzen 8xryzen 5900 71x,processor,best

此前尝试df.duplicated()仅得到布尔序列,未达需求;使用以下代码时输出混乱:

dof['new'] = list(set(dof['bc']) - set(dof['ab']))
dof['new']
dof.head()
错误原因

直接对整列执行集合运算会将所有行的关键词混在一起计算,而非按行单独处理,导致结果错乱。

解决方法

需按行逐条处理数据,步骤如下:

  1. 将每行的关键词字符串按逗号分割为列表;
  2. 提取ab_keywords的关键词集合(用于快速查重);
  3. 筛选出bc_keywords中的重复关键词和剩余关键词;
  4. 将结果拼接回逗号分隔的字符串,生成目标列。

代码实现

import pandas as pd

# 构造原始数据
data = {
    'ID': ['ABL345', 'ABL448'],
    'ab_keywords': ['ryzen,ryzen 7x,ryzen 5800,ryzen 7x', 'ryzen 5800 7x,ryzen 8x,cpu,ryzen 5800'],
    'bc_keywords': ['ryzen,ryzen 71x,ryzen 5900,best', 'ryzen 5900 71x,ryzen 8x,processor,best']
}
df = pd.DataFrame(data)

def process_single_row(row):
    # 分割关键词为列表,将ab关键词转成集合(提升查重效率)
    ab_keywords_set = set(row['ab_keywords'].split(','))
    bc_keywords_list = row['bc_keywords'].split(',')
    
    # 筛选重复关键词和剩余关键词,保留原顺序
    duplicate_keywords = [kw for kw in bc_keywords_list if kw in ab_keywords_set]
    filtered_bc_keywords = [kw for kw in bc_keywords_list if kw not in ab_keywords_set]
    
    return pd.Series({
        'duplis': ','.join(duplicate_keywords),
        'bc_new': ','.join(filtered_bc_keywords)
    })

# 按行应用处理函数,合并结果到原数据表
result_df = df.join(df.apply(process_single_row, axis=1))
print(result_df)

运行结果

ID                          ab_keywords                          bc_keywords     duplis                               bc_new
0  ABL345       ryzen,ryzen 7x,ryzen 5800,ryzen 7x          ryzen,ryzen 71x,ryzen 5900,best       ryzen           ryzen 71x,ryzen 5900,best
1  ABL448  ryzen 5800 7x,ryzen 8x,cpu,ryzen 5800   ryzen 5900 71x,ryzen 8x,processor,best  ryzen 8x  ryzen 5900 71x,processor,best

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:24:52