如何在pandas中提取两个序列之间的字符串差异?

watbbzwu  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(95)

我正在尝试创建一个新的pandas列,其中包含两个其他列之间的差异。
我拥有的:colA| colB|这是测试|这是一个测试|
我想要什么可乐|colB|这是测试|这是一个测试|这是一个___
这是我目前所拥有的代码

def tokenize(s):
    return re.split('\s+', s)

def untokenize(ts):
    return ' '.join(ts)

def equalize(s1, s2):
    l1 = tokenize(s1)
    l2 = tokenize(s2)
    res1 = []
    res2 = []
    prev = difflib.Match(0,0,0)
    for match in difflib.SequenceMatcher(a=l1, b=l2).get_matching_blocks():
        if (prev.a + prev.size != match.a):
            for i in range(prev.a + prev.size, match.a):
                res2 += ['_' * len(l1[i])]
            res1 += l1[prev.a + prev.size:match.a]
        if (prev.b + prev.size != match.b):
            for i in range(prev.b + prev.size, match.b):
                res1 += ['_' * len(l2[i])]
            res2 += l2[prev.b + prev.size:match.b]
        res1 += l1[match.a:match.a+match.size]
        res2 += l2[match.b:match.b+match.size]
        prev = match
    return untokenize(res1), untokenize(res2)
    print(untokenize(res1), untokenize(res2))

下面是示例字符串的代码的输出:('this is a test _______','this is a ____testing')
但我想将它应用于跨两个不同列的pandas dataframe,并返回一个带有结果的新列。

6ie5vjzr

6ie5vjzr1#

你也许想试试

# Assuming your dataframe name to be "df"
df['colC'] = df.apply(lambda row: equalize(row['ColA'], row['ColB']),axis=1)

注意-设置轴=1将帮助您访问单个行的各个列。查找更多关于pandas apply here的信息。

相关问题