- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个看起来像这样的数据框 -
ML_ENTITY_NAME EDT_ENTITY_NAME
1 ABC BANK HABIB METROPOLITAN BANK
2 ABC BANK HABIB METROPOLITIAN BANK
3 BANK OF AMERICA HSBC BANK MALAYSIA BHD
4 BANK OF AMERICA HSBC BANK MALAYSIA SDN BHD
5 BANK OF NEW ZEALAND HUA NAN COMMERCIAL BANK
6 BANK OF NEW ZEALAND HUA NAN COMMERCIAL BANK LTD
7 CITIBANK N.A. CHINA GUANGFA BANK CO LTD
8 CITIBANK N.A. CHINA GUANGFA BANK CO.,LTD
9 SECURITY BANK CORP. SECURITY BANK CORP
10 SIAM COMMERCIAL BANK THE SIAM COMMERCIAL BANK PCL
11 TEMU ANZ BANK SAMOA LTD
我写了一个 levenshtein 函数,看起来像 -
def fm(s1, s2):
score = Levenshtein.distance(s1,s2)
if score == 0.0:
score = 1.0
else:
score = 1 - (score / len(s1))
return score
我想编写一段代码,如果两个 EDT_ENTITY_NAME
值的 levenstein 分数大于 0.75
,那么我们会删除长度较小的一个值并保留该值长度更长。用于比较的 ML_ENTITY_NAME
也应该相同。
我的最终输出应该是这样的 -
ML_ENTITY_NAME EDT_ENTITY_NAME
1 ABC BANK HABIB METROPOLITIAN BANK
2 BANK OF AMERICA HSBC BANK MALAYSIA SDN BHD
3 BANK OF NEW ZEALAND HUA NAN COMMERCIAL BANK LTD
4 CITIBANK N.A. CHINA GUANGFA BANK CO.,LTD
5 SECURITY BANK CORP. SECURITY BANK CORP
6 SIAM COMMERCIAL BANK THE SIAM COMMERCIAL BANK PCL
7 TEMU ANZ BANK SAMOA LTD
目前我的方法是对 df 进行排序并迭代循环并检查 ML_ENTITY_NAME 值是否相同,然后计算 EDT_ENTITY_NAME 的 levenshtein。我添加了一个新列删除,如果满足上述条件并且一个 ML_ENTITY_NAME 的长度小于其他 ML_ENTITY_NAME,我会将删除列更新为 1。
我的代码看起来像 -
df.sort_values(by=['ML_ENTITY_NAME','EDT_ENTITY_NAME'],inplace=True)
df['delete']=0
for row1 in df.itertuples():
for row2 in df.itertuples():
if (str(row1.ML_ENTITY_NAME) == str(row2.ML_ENTITY_NAME)) and (1>fm(str(row1.EDT_ENTITY_NAME),str(row2.EDT_ENTITY_NAME))>.74):
if(len(row1.EDT_ENTITY_NAME)>len(row2.EDT_ENTITY_NAME)):
df.loc[row2.Index,row2[2]]=1
print(df)
目前它给出了错误的输出。
有人可以帮我提供一些答案/提示/建议吗?
最佳答案
我相信你需要:
#cross join by ML_ENTITY_NAME column
df1 = df.merge(df, on='ML_ENTITY_NAME', how='outer')
#remove same values per rows (distance 1)
df1 = df1[df1['EDT_ENTITY_NAME_x'] != df1['EDT_ENTITY_NAME_y']]
#apply function and compare
m1 = df1.apply(lambda x: fm(x['EDT_ENTITY_NAME_x'], x['EDT_ENTITY_NAME_y']), axis=1) > .75
m2 = df1['EDT_ENTITY_NAME_x'].str.len() > df1['EDT_ENTITY_NAME_y'].str.len()
#filtering
df2 = df1.loc[m1 & m2, ['ML_ENTITY_NAME','EDT_ENTITY_NAME_x']]
#remove `_x`
df2.columns = df2.columns.str.replace('_x$', '')
#add unique rows per ML_ENTITY_NAME
df2 = df2.append(df[~df['ML_ENTITY_NAME'].duplicated(keep=False)]).reset_index(drop=True)
print (df2)
ML_ENTITY_NAME EDT_ENTITY_NAME
0 ABC BANK HABIB METROPOLITIAN BANK
1 BANK OF AMERICA HSBC BANK MALAYSIA SDN BHD
2 BANK OF NEW ZEALAND HUA NAN COMMERCIAL BANK LTD
3 CITIBANK N.A. CHINA GUANGFA BANK CO.,LTD
4 SECURITY BANK CORP. SECURITY BANK CORP
5 SIAM COMMERCIAL BANK THE SIAM COMMERCIAL BANK PCL
6 TEMU ANZ BANK SAMOA LTD
关于python - 如何使用levenshtein函数删除pandas中的相似值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53665038/
我正在寻找 Damerau–Levenshtein 的实现PHP 的算法,但我的 friend google 似乎找不到任何东西。到目前为止,我必须使用 PHP 实现的 Levenshtein(没有
我坐在这里用 Java 为我的主程序编写一些算法(这是迄今为止的第一个)。我对 levenshtein 算法进行了很好的编程,这要归功于 wiki 对新手的伪代码非常好,还有一个很好的教程 :D 然后
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 问题必须表现出对正在解决的问题的最低限度的理解。告诉我们您尝试过的方法、为什么不起作用以及它应该 起作用
similar_text()中文汉字版 复制代码 代码如下: <?php &nbs
我实现了一个 levenshtein trie 来查找与给定单词相似的单词。 我的目标是有一种快速的方法来进行拼写纠正。 但是我发现有一种更快的方法可以做到这一点: 莱文斯坦自动机 我只是有一个问题.
说我的数据库中有以下两个字符串: (1) 'Levi Watkins Learning Center - Alabama State University' (2) 'ETH Library' 我的软
这是一个字符串 T : 'men shirt team brienne funny sarcasm shirt features graphic tees mugs babywear much rea
我想使用字符串相似度函数来查找数据库中损坏的数据。 我遇到了其中几个: 贾罗, 贾罗-温克勒, 编辑, 欧几里得和 Q-gram, 我想知道它们之间有什么区别以及它们在什么情况下效果最好? 最佳答案
我需要一些有关以下代码的帮助。在这种情况下,我需要找到与输入的单词最接近的单词来测试我将 word_0 设置为“pikaru”,它应该返回“pikachu”。 levenshtein 函数返回我们输入
我有一个脚本可以使用 Levenshtein 在数据库中搜索单词。当我搜索英文单词时一切正常,但是当我搜索俄语单词时,MySQL 控制台报错: [22007][1366] (conn=31079) I
列支敦士登在c编程中总是返回无限循环这是我的代码我尝试了很多解决方案并且我尝试存储变量并使用指针但总是有无限循环我认为这是因为3个递归调用但在列支敦士登算法的文档中我找到了这个实现 #include
有什么方法可以对数组使用 Levenshtein Distance例如我有一个包含多个文本的 div one,two,three,longtext,anything 和一个输入 // sometex
这是我为了好玩而编写的 Levenshtein 距离的并行实现。我对结果很失望。我在核心 i7 处理器上运行它,所以我有很多可用线程。但是,当我增加线程数时,性能会显着下降。我的意思是,对于相同大小的
我想对 mysql 查询结果执行编辑。 查询如下所示: $query_GID = "select `ID`,`game` from `gkn_catalog`"; $result_GID = $dbc
我有包含两个相似字符的字符串。两者都显示为带有 ogonek 的小“a”: ± ± (注意:根据渲染器,它们有时呈现相似,有时略有不同) 但是,它们是不同的: 第一个字符的特征: 在 PostgreS
我有一个足够有效的查询,但我想通过在查询参数和相关字段之间使用 levenshtein 对结果进行排序。 现在我在 ES 中进行查询,然后在我的应用程序中进行排序。现在我正在测试脚本字段。这是脚本 i
我使用此查询来搜索公司详细信息 select * from company_details where levenshtein_ratio('New York Life Insurance Compa
我正在寻找一个字符串比较指标 ala Levenshtein,当字符串中的字符被打乱时,它也可以工作。有谁知道这样的指标?如果有一个 Python 模块可以计算这样的指标,那就太好了。谢谢! 最佳答案
R 中有一个名为stringdist 的package,它包含计算Levenshtein 字符串距离的函数。这个包有两个问题: 1st 它不适用于大字符串,例如: set.seed(1) a.str
我正在编写一个使用比较来确定模糊匹配的脚本,因此我正在使用 Levenshtein 功能。 不幸的是,当我在终端窗口中运行 easy_install python-Levenshtein 时,当我在其
我是一名优秀的程序员,十分优秀!