Python Pandas SequenceMatch列为每个值并返回closematch

2024-09-30 18:34:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个DataFrame对象,每个对象包含2列字符串数据。我需要将列abc和{}进行比较,然后根据最高匹配比率合并两个DataFrame对象。在

   DF1                                DF2
a       b                          c       d
apple  paster                      doser   ankle
bac    bur                         are     bun
sit    sign                        and     lake
car    bun                         ape     mason
alli   makeup                      noodle  paster

输出示例

^{pr2}$

显然,这些比率是由完美匹配1构成的。在

我可以遍历每个DataFrame对象的每一行,并应用difflib.SequenceMatcher函数返回比率,然后使用max ratio和相应的数据来设置该行上的值,但是考虑到数据有多大,这将需要很长时间。我很好奇我是否可以使用apply在两个DataFrame对象上应用这个函数


Tags: 数据对象函数字符串appledataframe比率df1
1条回答
网友
1楼 · 发布于 2024-09-30 18:34:39

(在原始的df2和示例输出之间,您的一些输出是否发生了变化?我假设示例输出具有正确的df2),看起来您是将a与{}配对,b与{}配对,所以首先,让我们将数据帧连接在一起。在

import pandas as pd
from difflib import SequenceMatcher

df1 = pd.DataFrame({'a': ['apple', 'bac', 'sit', 'car', 'alli'],
                    'b': ['paster', 'bur', 'sign', 'bun', 'makeup']})

df2 = pd.DataFrame({'c': ['noodle', 'are', 'and', 'ape', 'noodle'],
                    'd': ['paster', 'bun', 'lake', 'bun', 'paster']})

df = pd.concat([df1, df2], axis=1)

我们必须做一个apply,它包含两列。我们应该创建一个可以接受两个列名作为参数的函数。在

^{pr2}$

我得去看看SequenceMatcher是怎么工作的。需要注意的一点是,它可以接受数组,因此您必须小心:您对string序列匹配、元素到元素特别感兴趣,这就是为什么您需要apply并且不能直接插入列。在

现在您可以将此sim_metric应用于a和{},以及{}和{}。在

df['a_c_comp'] = df.apply(sim_metric,
                          args=('a', 'c'),
                          axis=1)

df['b_d_comp'] = df.apply(sim_metric,
                          args=('b', 'd'),
                          axis=1)

注意我是如何使用applyargs参数来指定泛型sim_metric的列名。在

最后,我们可以对最后的comparison_ratio列执行max。在

df['comparison_ratio'] = df[['a_c_comp', 'b_d_comp']].max(axis=1)
print(df)

结果如下。在

       a       b       c       d  a_c_comp  b_d_comp  comparison_ratio
0  apple  paster  noodle  paster  0.363636  1.000000          1.000000
1    bac     bur     are     bun  0.333333  0.666667          0.666667
2    sit    sign     and    lake  0.000000  0.000000          0.000000
3    car     bun     ape     bun  0.333333  1.000000          1.000000
4   alli  makeup  noodle  paster  0.200000  0.333333          0.333333

相关问题 更多 >