提问人:Ann Alexis 提问时间:4/25/2023 最后编辑:mosc9575Ann Alexis 更新时间:4/25/2023 访问量:74
比较两个数据帧中具有逗号分隔值的两列
Compare two columns in two dataframes which has comma separated values
问:
我有一个数据帧 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编写此代码
答:
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
下一个:插入排序比较分析
评论