查找两个列表列列表之间的共同元素?

Posted

技术标签:

【中文标题】查找两个列表列列表之间的共同元素?【英文标题】:Find common elements between two list of list columns? 【发布时间】:2021-01-01 19:09:18 【问题描述】:

假设这是我拥有的数据框:

dw = 'id' : [1,2,3,4,5], 'first_item' : [['Motherboard', 'Miscellaneous'],
                                        ['Miscellaneous', 'Mechanical Hardware'],
                                        ['Motherboard', 'Hard Drive'],
                                        ['Mechanical Hardware', 'Hard Drive'],
                                        ['Motherboard','Mechanical Hardware']],
      'second_item' : [['Motherboard', 'Hard Drive'],
                                        ['Mechanical Hardware', 'Mechanical Hardware'],
                                        ['Motherboard', 'Hard Drive'],
                                        ['Mechanical Hardware', 'Hard Drive'],
                                        ['Motherboard','Miscellaneous']]
dw = pd.DataFrame(dw)

我想找到第一项和第二项(按行)之间的交集/公共元素,得到这样的输出:

   dw['new']
1 ['Motherboard']
2 ['Mechanical Hardware']
3 ['Motherboard', 'Hard Drive']
4 ['Mechanical Hardware', 'Hard Drive']
5 ['Motherboard']

我尝试了下面的代码,但它没有产生预期的结果:

def intersection(lst1, lst2):
    return list(set(lst1) & set(lst2))

dw['new'] = dw.apply(lambda x: intersection(dw.first_item, dw.second_item), axis = 1)

【问题讨论】:

是的。那是一个错误(错字)。感谢您的强调。但我收到一个错误:不可散列的类型:'list'。 是的。它现在起作用了。我意识到错误在哪里。非常感谢。你能帮我找到不常见的元素吗?即消除第一项和第二项中未共享的公共/交叉元素和查找元素? 您正在寻找对称差异。试试list(set(lst1) ^ set(lst2))? 【参考方案1】:

你可以试试np.intesect1d:

dw['new'] = [np.intersect1d(x,y) for x,y in zip(dw.first_item, dw.second_item)]

【讨论】:

还有一个查询:如果我想找到不常见的元素(那些不在 first_item 和 second_item 中的元素(不常见的元素),那么代码是什么: 使用np.setxor1d 而不是np.intersect1d 来查找集独占。【参考方案2】:

试试这个

list1_as_set = set(list1)
intersection = list1_as_set.intersection(list2)             
intersection_as_list = list(intersection)

我不确定,但试试这个!!

【讨论】:

他的问题是针对 pandas 数据框中每一行中的两个列表 - 这仅针对两组。

以上是关于查找两个列表列列表之间的共同元素?的主要内容,如果未能解决你的问题,请参考以下文章

两个列表中的共同元素

通过Python中的正则表达式优化在两个列表之间查找匹配子字符串

散列表查找(哈希算法)的定义与实现

查找两个不同列表是不是包含完全相同元素的简单方法?

python 两个列元素拼接

JQ 查找 两个同辈元素之间 的同辈元素 nextUntil() 用于做一个多级菜单