繁体   English   中英

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

[英]Python list comprehensions/ loop for selecting same member in different df columns

我是Python的新手,存在以下问题。

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

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

显然,“ 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']

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

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中的翻转重复。

对于它的作用

  1. 遍历上校。
    1. 生成每个名称的反向列表。
    2. 检查联接的反向名称是否已经存在。
      1. 如果是这样,将其从列表中删除

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM