【问题标题】:Finding similarities between two columns in two datasets in Python: optimization of approach在 Python 中查找两个数据集中两列之间的相似性:方法的优化
【发布时间】: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' 更好的方法吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    不确定您期望的确切输出,但您可以使用.isin() 方法see pandas docs

    这会比合并快很多。

    类似

    duplicates = df2[df2['name'].isin(df1['name'])]
    

    这将输出以下内容,它为您提供来自 df2 的 ID,其中名称在 df1 中重复。

    number name
    0 1 one
    1 2 two
    2 3 three
    3 4 four
    4 5 five
    5 55 five
    6 555 five
    7 6 six
    8 7 seven
    9 77 seven
    10 777 seven

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      相关资源
      最近更新 更多