问题描述
我有一个数据帧,其中一首歌的歌词(每行一首歌),而且我知道其中有多个重复项,这些重复项并不完全相同,但是拼写有所不同。我写了下面的代码,该代码有效,但是速度很慢,因为歌词是很长的字符串,并且数据帧有1000行以上。有没有更优雅/有效的编码方式?
def similar(a,b):
return SequenceMatcher(None,a,b).ratio()
def mark_duplicates_within_column(df,column,alpha = 0.95):
df['duplicate'] = [False]*df.shape[0]
for i,val_a in enumerate(tqdm_notebook(df[column])):
if df['duplicate'].iloc[i] == True:
continue
for j,val_b in enumerate(df[column]):
if df['duplicate'].iloc[j] == True:
continue
if val_a == val_b:
continue
elif similar(val_a,val_b) > alpha:
df['duplicate'].iloc._setitem_with_indexer(j,True)
return df
这是我要实现的目标的一个玩具示例:
>>> df = pd.DataFrame(columns = ['names'],data = ['Thomas Müller','Thomas Muller','Toni Kroos'])
>>> mark_duplicates_within_column(df,'names',alpha=0.9)
names duplicate
0 Thomas Müller False
1 Thomas Muller True
2 Toni Kroos False
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)