[英]How to get most common words with a specific value in a dataframe Python
[英]Get most similar value from dataframe column to specific string python
我想从 dataframe 列中找到与指定字符串最相似的值,例如a='book'
。 假设 dataframe 看起来像: df
col1
wijk 00 book
Wijk a
test
现在我想返回wijk 00 book
,因为这a
. 我正在尝试使用模糊的fuzzywuzzy
来做到这一点。
因此,我有一个 dataframe A
的值,我想要一个类似的值。 然后我使用:
A['similar_value'] = A.col1.apply(lambda x: [process.extract(x, df.col1, limit=1)][0][0][0])
但是当比较很多字符串时,这会花费太多时间。 有谁知道如何快速做到这一点?
我会使用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)
Output:
most_similar
('wijk 00 book', 90.0, 0)
这会为您提供列中最相似的字符串以及它与您的搜索字符串的相似程度的分数。
您可以使用“str.contains”方法获取与 substring 完全相同的字符串
df[df["column_name"].str.contains("book")].values[0][0]
尝试fuzz.ratio()
和Series.idxmax()
。 这将针对a
定位具有最高模糊分数的col1
值:
from rapidfuzz import fuzz
a = 'book'
df.loc[df.col1.apply(lambda x: fuzz.ratio(x, a)).idxmax()]
# col1 wijk 00 book
# Name: 0, dtype: object
更新: @lolliesaurus的process.extractOne()
方法更快:
>>> %timeit process.extractOne(a, df.col1, scorer=fuzz.WRatio)
11.6 µs ± 180 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> %timeit df.loc[df.col1.apply(lambda x: fuzz.ratio(x, a)).idxmax()]
353 µs ± 3.45 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.