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

2024-09-28 19:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,我有以下问题。你知道吗

我发现有几个问题很难自己解决。你知道吗

假设我们有两个数据帧,我可以从中提取两列。 假设在一个名为col1的列中,我们有主题的名称,可以在同一列中重复,形式如下:“QUENTIN TARANTINO”或“TARANTINO QUENTIN”。在另一列col2中,我有如下形式的条目:“TARANTINO,QUENTIN”或“TARANTINO,QUENTIN”,也可以重复。你知道吗

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

我想'合并'在一列这两列,使同一主题有一个,只有一个标签。如何使用列表理解(或循环)使其同时报告名称(在这种形式中为:“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']

Tags: 数据对象名称主题列表条目标签形式
2条回答

解决此问题的简单方法是使用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))

它将消除列中的翻转重复

因为它的作用

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

^{}将返回一个迭代器,因此它应该是for循环的主题。rev只保留一个翻转名称的副本,以便在下一步进行比较。你知道吗

相关问题 更多 >