Python 使用Levenshtein距离替换另一列中的单词w.r.t单词

Python 使用Levenshtein距离替换另一列中的单词w.r.t单词,python,function,pandas,dataframe,levenshtein-distance,Python,Function,Pandas,Dataframe,Levenshtein Distance,假设我有一个数据帧df1: Sr A B C 1 rains It rain there. It rains there 2 plane This is a vertical planes This is a vertical plane 3 tree Plant a trees

假设我有一个数据帧
df1

Sr       A              B                            C
1      rains         It rain there.             It rains there
2      plane         This is a vertical planes  This is a vertical plane
3      tree          Plant a trees              Plant a tree
C
是我的预期输出。我需要将B列字符串中的每个单词与A列中的单词进行比较,如果Levenshtein距离为1,则替换它

我的方法

import jellyfish as jf
def word_replace(str1):
    comp = #don't know how to store value of column A in this variable.
    for word in str1.split():
        if jf.levenshtein_distance(word,comp) == 1:
           word = comp
        else:
            pass
    return str1

df1['C'] = df1['B'].apply(word_replace)
第二件事,如果列
A
有两个单词,比如
“未遂”
?我需要如何修改上述代码?例如:

 Sr       A              B                            C
  1     near miss        that was a ner mis          that was a near miss
您在一个问题中提出了两个问题,这对于堆栈溢出来说从来都不是一个好主意。我只想回答你的第一个问题,如果你想让别人看看你的第二个问题,那么我建议你专门为此写一个新问题

可以跨行或跨列工作,您希望单独处理每一行,因此必须传递
axis=1
关键字参数

下面是一些解决您的问题的代码,它使用a来选择需要替换的单词。然后使用将此列表连接在一起

最初,您的代码在拆分字符串上进行迭代,但这将不起作用。它还假设函数的输入是一个字符串,这是不正确的,因为它将是一个
pandas.Series
对象

这是一段简化的代码,没有考虑标点符号之类的东西,我把它作为练习留给读者

import pandas as pd
import jellyfish as jf

data1 =  {'A':['rains','plane','tree'],'B':['It rain there','This is a vertical planes','Plant a trees']}
df1 = pd.DataFrame(data1)

def word_replace(row):
    comp = row['A']
    str1 = row['B']

    out = ' '.join([comp if jf.levenshtein_distance(word, comp) == 1
                    else word for word in str1.split()])
    return out

df1['C'] = df1.apply(word_replace, axis=1)

那么,你的方法到底有什么问题?错误(提供完整的回溯)?意外输出(提供输入以及预期和实际输出)?还没有错误,我还没有弄清楚如何在变量comp中存储A列的相应值。