我是Python的新手,我遇到了以下问题。
我有几个问题,我发现自己很难解决。
假设我们有两个pandas数据帧,我可以从中提取两列。 假设在一个名为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']
答案 0 :(得分:1)
解决这个问题的简单方法是使用set try this: 因为您需要首先将较低的值应用于列表中的所有元素
col = list(set( [x.lower().replace(', ',' ') for x in col1]+[x.lower().replace(', ',' ') for x in col2]))
答案 1 :(得分:1)
除了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中的翻转重复。
它的作用,
reversed(list)
将返回一个迭代器,因此它应该是for循环的主题。 rev
只保留翻转名称的副本,以便在下一步中轻松进行比较。