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

Python中如何比较两个DataFrame的逗号分隔值列(忽略顺序)

解决方法

核心思路是把Items列的字符串转换成元素集合(集合不关心元素顺序,只关心元素是否存在),再比较集合是否相等。需要先统一处理不同的分隔符(逗号、空格):

步骤1:定义处理函数

先写一个函数,把任意分隔的字符串转成元素集合:

def str_to_set(s):
    # 把逗号替换成空格,统一分隔符
    cleaned = s.replace(',', ' ')
    # 按空格分割,过滤空字符串(避免连续空格的情况)
    elements = [item.strip() for item in cleaned.split() if item.strip()]
    # 转成集合
    return set(elements)

步骤2:处理两个DataFrame的Items列

用apply方法把函数应用到Items列,得到集合列:

import pandas as pd

# 构造示例DataFrame
df1 = pd.DataFrame({
    'Id': ['AQ', 'AT', 'AY'],
    'Items': ['a,b,c', 'z,x,y', 'k,l,m']
})

df2 = pd.DataFrame({
    'Id': ['AQ', 'AT', 'AY'],
    'Items': ['b,c a', 'z,y,x', 'k,l,m,n']
})

# 生成集合列
df1['items_set'] = df1['Items'].apply(str_to_set)
df2['items_set'] = df2['Items'].apply(str_to_set)

步骤3:比较并生成结果

合并两个DataFrame的Id和items_set列,比较集合是否相等,最后整理成目标格式:

# 按Id合并,确保顺序一致
result = pd.merge(df1[['Id', 'items_set']], df2[['Id', 'items_set']], on='Id', suffixes=('_1', '_2'))
# 比较集合是否相等
result['comparison_items'] = result['items_set_1'] == result['items_set_2']
# 保留需要的列
final_result = result[['Id', 'comparison_items']]

print(final_result)

运行后输出:

Id  comparison_items
0  AQ              True
1  AT              True
2  AY             False

补充说明

如果你的Items列存在重复元素(比如a,a,b),且需要考虑重复次数,就不能用集合了,应该用排序后的列表来比较:

def str_to_sorted_list(s):
    cleaned = s.replace(',', ' ')
    elements = [item.strip() for item in cleaned.split() if item.strip()]
    return sorted(elements)

# 后续比较逻辑同上,只是把集合换成排序后的列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:35:00