gpt4 book ai didi

Python模糊字符串匹配作为相关样式表/矩阵

转载 作者:太空狗 更新时间:2023-10-30 00:12:34 29 4
gpt4 key购买 nike

我有一个包含 x 个字符串名称及其关联 ID 的文件。本质上是两列数据。

我想要的是一个格式为 x x x 的相关样式表(将相关数据同时作为 x 轴和 y 轴),但我想要 fuzzywuzzy 库的函数 fuzz 而不是相关性。 ratio(x,y) 作为输出,使用字符串名称作为输入。基本上针对每个条目运行每个条目。

这就是我的想法。只是为了表明我的意图:

import pandas as pd
from fuzzywuzzy import fuzz

df = pd.read_csv('random_data_file.csv')

df = df[['ID','String']]
df['String_Dup'] = df['String'] #creating duplicate of data in question
df = df.set_index('ID')

df = df.groupby('ID')[['String','String_Dup']].apply(fuzz.ratio())

但显然这种方法目前对我不起作用。任何帮助表示赞赏。不一定是pandas,只是我比较熟悉的环境。

我希望我的问题措辞清楚,真的,任何意见都将受到赞赏,

最佳答案

使用 Pandas 的 crosstab函数,后跟按列的 apply计算模糊。这比我的第一个答案要优雅得多。

import pandas as pd
from fuzzywuzzy import fuzz

# Create sample data frame.
df = pd.DataFrame([(1, 'abracadabra'), (2,'abc'), (3,'cadra'), (4, 'brabra')],
columns=['id', 'strings'])
# Create the cartesian product between the strings column with itself.
ct = pd.crosstab(df['strings'], df['strings'])
# Note: for pandas versions <0.22, the two series must have different names.
# In case you observe a "Level XX not found" error, the following may help:
# ct = pd.crosstab(df['strings'].rename(), df['strings'].rename())

# Apply the fuzz (column-wise). Argument col has type pd.Series.
ct = ct.apply(lambda col: [fuzz.ratio(col.name, x) for x in col.index])

# This results in the following:
# strings abc abracadabra brabra cadra
# strings
# abc 100 43 44 25
# abracadabra 43 100 71 62
# brabra 44 71 100 55
# cadra 25 62 55 100

为简单起见,我省略了您问题中建议的 groupby 操作。如果需要对组应用模糊字符串匹配,只需创建一个单独的函数:

def cross_fuzz(df):
ct = pd.crosstab(df['strings'], df['strings'])
ct = ct.apply(lambda col: [fuzz.ratio(col.name, x) for x in col.index])
return ct

df.groupby('id').apply(cross_fuzz)

关于Python模糊字符串匹配作为相关样式表/矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53261214/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com