с ответом, который вы дали, вы можете использовать функции pandas apply
, stack
и groupby
для ускорения вашего кода. у вас есть ввод, такой как:
import pandas as pd
from fuzzywuzzy import fuzz
df = pd.DataFrame({'Merchant details': ['Alpha co','Bravo co'],
'Comments':['electionsss are around',
'vote in eelecttions']})
Для столбца 'комментарии' вы можете создать временный DF mutiindex, содержащий слово в строке, разделив и используя stack
функцию:
df_temp = pd.DataFrame(
{'split_comments':df['Comments'].str.split(' ',expand=True).stack()})
Затем вы создаете столбец с исправленным словом (согласно вашей идее), используя apply
и сравнение fuzz.ratio
:
df_temp['corrected_comments'] = df_temp['split_comments'].apply(
lambda wd: 'election' if fuzz.ratio(wd, 'election') > 75 else wd)
Наконец, вы записываете обратно в столбец Comments
из df
с исправленными данными, используя функции groupby
и join
:
df['Comments'] = df_temp.reset_index().groupby('level_0').apply(
lambda wd: ' '.join(wd['corrected_comments']))