【发布时间】:2021-11-19 22:15:06
【问题描述】:
假设我有以下数据集:
import difflib as dl
import numpy as np
import pandas as pd
df1 = pd.DataFrame([[1,'one'],[2,'two'],[3,'three'],[4,'four'],[5,'five'],[7,'seven']], columns=['number', 'name'])
df2 = pd.DataFrame([[1,'one'],[2,'two'],[3,'three'],[4,'four'],[5,'five'],[55,'five'],[555,'five'],[6,'six'],[7,'seven'],[77,'seven'],[777,'seven'],[8,'eight']], columns=['number', 'name'])
我想找到两个数据集的名称列之间的相似之处,为此我使用来自 pandas 的 difflib 库和 apply 方法:
df1['duplicates'] = df1['name'].apply(lambda x: dl.get_close_matches(x, df2['name'], cutoff=0.75, n=5))
在此之后我使用explode,以便将列表扩展为单独的记录:
df1 = df1.explode('duplicates').reset_index(drop=True).drop_duplicates(subset=['duplicates'],keep="last")
df1.reset_index(drop=True,inplace = True)
最后我得到了以下结果:
number name duplicates
0 1 one one
1 2 two two
2 3 three three
3 4 four four
4 5 five five
5 7 seven seven
但在最终的数据框中,我也想获得重复的 ID(来自 df_2)。
当然,我可以使用pd.merge 函数,但是对于大数据集(10k 记录),它很慢,我想,有更好的方法来实现我的目标。
我们可以在apply 函数中返回重复的 id 吗?
有比 'pd.merge' 更好的方法吗?
【问题讨论】: