【问题标题】:Get most similar value from dataframe column to specific string python从数据框列获取最相似的值到特定的字符串python
【发布时间】:2021-04-26 16:01:03
【问题描述】:

我想从数据框列中找到与指定字符串最相似的值,例如a='book'。假设数据框看起来像:df

col1
wijk 00 book
Wijk a 
test

现在我想返回wijk 00 book,因为它与a 最相似。我正在尝试使用 fuzzywuzzy 包来做到这一点。

因此,我有一个数据框A,其中包含我想要类似的值。然后我使用:

A['similar_value'] = A.col1.apply(lambda x: [process.extract(x, df.col1, limit=1)][0][0][0])  

但是当比较很多字符串时,这会花费太多时间。有谁知道如何快速做到这一点?

【问题讨论】:

  • 你如何定义相似度?
  • @ZalakBhalani 数据框列中的字符串应包含字符串a
  • fuzzywuzzy 的当前代码是什么?我们可以尝试优化它
  • 我添加了我的代码
  • 流程变量定义为什么?

标签: python pandas fuzzywuzzy


【解决方案1】:

我会使用rapidfuzz:

from rapidfuzz import process, fuzz

df = pd.DataFrame(['wijk 00 book', 'Wijk a', 'test'], columns=['col1'])

search_str = 'book'
most_similar = process.extractOne(search_str, df['col1'], scorer=fuzz.WRatio)

输出:

most_similar
('wijk 00 book', 90.0, 0)

这会为您提供列中最相似的字符串以及它与您的搜索字符串的相似程度的分数。

【讨论】:

  • 不错的 +1,比我使用 rapidfuzz 和 apply() 的版本快得多
【解决方案2】:

您可以使用 'str.contains' 方法来获取字符串的确切子字符串

df[df["column_name"].str.contains("book")].values[0][0]

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2015-12-19
    • 2015-11-23
    • 2013-11-20
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多