比较两个数据帧中具有逗号分隔值的两列

Compare two columns in two dataframes which has comma separated values

提问人:Ann Alexis 提问时间:4/25/2023 最后编辑:mosc9575Ann Alexis 更新时间:4/25/2023 访问量:74

问:

我有一个数据帧 df1

Id Items
AQ  a,b,c
AT  z,x,y
AY  k,l,m

我还有另一个 df2

Id Items
AQ  b,c a
AT  z,y,x
AY  k,l,m,n

我想比较两个 dfs 的项目列。简单地比较会给出错误,因为顺序不同。但它们有相同的价值观。我该如何订购和比较。 合成 df

Id comparison_items
AQ  True
AT  True
AY  False

我尝试对值进行排序,但没有得到预期的结果。我正在用python编写此代码

Python Pandas 数据帧 排序 比较

评论

0赞 Skilopsaros 4/25/2023
你关心元素的多样性吗?如果没有,您可以创建一个函数,将每列都比较为一个集合,并以这种方式比较它们是否具有相同的元素

答:

1赞 mosc9575 4/25/2023 #1

我不确定“Items”列中的值类型是字符串还是列表,但在这两种情况下,应用于此列然后比较两个 DataFrame 就足够了。sorted

列表示例

import pandas as pd
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'] = df1['Items'].apply(sorted)
df2['Items'] = df2['Items'].apply(sorted)
df1 == df2
>>>   Id    Items
0   True    True
1   True    True
2   True    False

字符串示例

import pandas as pd
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']})

# maybe a bit cleaner, but still giving the same result
# df1['Items'] = df1['Items'].apply(lambda x: sorted(x.split(',')))
# df2['Items'] = df2['Items'].apply(lambda x: sorted(x.split(',')))

df1['Items'] = df1['Items'].apply(sorted)
df2['Items'] = df2['Items'].apply(sorted)
df1 == df2
>>>   Id    Items
0   True    True
1   True    True
2   True    False

要获得所需的结果,您可以使用

df = df1.assign(comparison_items = df1['Items']==df2['Items']).drop('Items', axis=1)
df
>>> Id  comparison_items
0   AQ  True
1   AT  True
2   AY  False