用于在不同df列中选择相同成员的Python列表理解/循环

用于在不同df列中选择相同成员的Python列表理解/循环,python,pandas,list-comprehension,Python,Pandas,List Comprehension,我是Python新手,我有以下问题 我有几个问题我发现自己很难解决 假设我们有两个panda数据帧,我可以从中提取两列。 假设在一个名为col1的专栏中,我们有受试者的名字,可以在同一专栏中重复,形式如下:“昆汀·塔伦蒂诺”或“塔伦蒂诺·昆汀”。在另一列col2中,我有以下形式的条目:“塔伦蒂诺,昆廷”或“塔伦蒂诺,昆廷”,也可以重复 显然,“塔伦蒂诺,昆廷”或“塔伦蒂诺,昆廷”是同一主题,但是不同的对象 我想将这两列“合并”到一列中,以便同一主题有一个且只有一个标签。如何使用列表理解(或循环)

我是Python新手,我有以下问题

我有几个问题我发现自己很难解决

假设我们有两个panda数据帧,我可以从中提取两列。 假设在一个名为col1的专栏中,我们有受试者的名字,可以在同一专栏中重复,形式如下:“昆汀·塔伦蒂诺”或“塔伦蒂诺·昆汀”。在另一列col2中,我有以下形式的条目:“塔伦蒂诺,昆廷”或“塔伦蒂诺,昆廷”,也可以重复

显然,“塔伦蒂诺,昆廷”或“塔伦蒂诺,昆廷”是同一主题,但是不同的对象

我想将这两列“合并”到一列中,以便同一主题有一个且只有一个标签。如何使用列表理解(或循环)来报告名称(以这种形式:“TARANTINO,QUENTIN”)和计数

col1 = ['QUENTIN TARANTINO', 'BARACK OBAMA', 'QUENTIN TARANTINO', 'CHARLIE CHAPLIN', 'JAMES LEBRON', 'KOBE BRYANT', 'Philippe Wain', 'LE CAM ALBERT', 'ANDREW ROBERTS', 'Obama Barack', 'tarantino quentin']

col2 = ['OBAMA, BARACK', 'CHAIN, GEORGE', 'Phylo, SOPY', 'Losan, Santos']

解决此问题的简单方法是使用set try this: 因为您需要首先对列表中的所有元素应用lower

col = list(set( [x.lower().replace(', ',' ') for x in col1]+[x.lower().replace(', ',' ') for x in col2]))

解决此问题的简单方法是使用set try this: 因为您需要首先对列表中的所有元素应用lower

col = list(set( [x.lower().replace(', ',' ') for x in col1]+[x.lower().replace(', ',' ') for x in col2]))

除了Espoir的答案外,要处理翻转,请运行以下命令:

col = list(set( [x.lower().replace(', ',' ') for x in col1]+[x.lower().replace(', ',' ') for x in col2])) #thanks espoir
for x in col:
    rev = [i for i in reversed(x.split())]
    if ' '.join(rev) in col:
        col.pop(col.index(x))
它将消除col中的翻转重复

因为它的作用

  • 在列上迭代。
  • 生成每个名称的反向列表
  • 检查联接的反向名称是否已存在。
  • 如果是,请将其从列表中删除

  • 将返回一个迭代器,因此它应该是for循环的主题
    rev
    只保留一份翻页名称的副本,以便下一步进行比较。

    除了Espoir的答案外,要处理翻页,请运行以下命令:

    col = list(set( [x.lower().replace(', ',' ') for x in col1]+[x.lower().replace(', ',' ') for x in col2])) #thanks espoir
    for x in col:
        rev = [i for i in reversed(x.split())]
        if ' '.join(rev) in col:
            col.pop(col.index(x))
    
    它将消除col中的翻转重复

    因为它的作用

  • 在列上迭代。
  • 生成每个名称的反向列表
  • 检查联接的反向名称是否已存在。
  • 如果是,请将其从列表中删除

  • 将返回一个迭代器,因此它应该是for循环的主题
    rev
    只保留一份翻页名称的副本,以便在下一步进行比较。

    谢谢您的帮助,但它没有回答我的问题。这将创建一个包含N1+N2元素的新列。相反,我需要一个没有重复元素的新专栏。从COL1代表的“昆汀·塔伦蒂诺”和“Tarantino Quentin”代表了同一个人,我希望新专栏把它们看作是同一个对象,也可以从COL2YES中选择“塔伦蒂诺,昆廷”,但是“昆汀·塔伦蒂诺”和“塔伦蒂诺昆廷”仍然是同一个主题,但被认为是不同的。我错了吗?是的,我明白了。你的意思是“奥巴马”和“奥巴马”是同一回事吗??如果“是”设置不能解决问题,让我检查另一种方法“是”!你的观点确实很有帮助,但不能解决问题。谢谢你的帮助,但它不能回答我的问题。这将创建一个包含N1+N2元素的新列。相反,我需要一个没有重复元素的新专栏。从COL1代表的“昆汀·塔伦蒂诺”和“Tarantino Quentin”代表了同一个人,我希望新专栏把它们看作是同一个对象,也可以从COL2YES中选择“塔伦蒂诺,昆廷”,但是“昆汀·塔伦蒂诺”和“塔伦蒂诺昆廷”仍然是同一个主题,但被认为是不同的。我错了吗?是的,我明白了。你的意思是“奥巴马”和“奥巴马”是同一回事吗??如果“是”设置不能解决问题,让我检查另一种方法“是”!你的观点确实很有帮助,但不能解决问题。你介意向我(一个学习者)解释一下rev创造了什么吗?和.加入(修订版)?很抱歉在这个问题上打扰你。谢谢@notcompletelyrational,请投票支持我的答案,感谢它给你的帮助,请解释清楚!你值得投票,但也要感谢@EspoirMurhabazi的直觉。你介意向我(一个学习者)解释一下rev创造了什么吗?和.加入(修订版)?很抱歉在这个问题上打扰你。谢谢@notcompletelyrational,请投票支持我的答案,感谢它给你的帮助,请解释清楚!你值得投票,但也要感谢@EspoirMurhabazi的直觉。