【发布时间】:2019-12-04 16:08:54
【问题描述】:
我的 df 包含以下列:
['Date', 'Company Name', Amount]
但是,在Company Name 下,有时一家公司的名称与另一家公司的名称相似;例如。 'Acme Corporation' vs 'Acme Corpor' 是同一家公司。
为了更具体地了解 df,下面是一个示例:
['Date', 'Company Name', 'Amount']
['01/01', 'ACME', 100 ]
['01/01', 'ACME Corpor', 150 ]
['01/01', 'ACME Corpor', 150 ]
['01/02', 'ACME Corporation', 50 ]
这当然跨越其他日期,共有 2500 多家独特公司
我需要的是(例如)在不影响 ACME 的情况下将 ACME Corpor 转变为 ACME Corporation(基于上面的示例 df)
我已经建立了某种逻辑来执行此操作,但我认为我的整个脚本效率低下或只是有问题。
我的逻辑基于以下代码块:
from difflib import SequenceMatcher
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
我从中得到的:How to find similar rows in columns with difflib?
所以基本上我在Company Name 列中将两个项目(a 和b)匹配在一起,如果匹配结果高于 0.7,则确定一个任意阈值(在本例中我设置为 0.7),然后我将a 附加到一个新列(比如new_names),如果没有,我附加b。
from difflib import SequenceMatcher
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
new_name = []
for i in range(0,len(df.company)-1):
if (similar(df.company[i],df.company[i+1]) > 0.7) & (i != 0):
new_name.append(df.customer[i])
else:
new_name.append(df.customer[i+1])
这并没有真正发生,我认为这是由于“公司名称”列中发生的重复。我已经尝试将上面的代码块用于分组数据帧,我相信它可以正常工作,但我想尽可能地使用"raw"df 上的脚本
【问题讨论】: