【问题标题】:Contains function in Pandas包含 Pandas 中的函数
【发布时间】:2016-10-18 18:20:32
【问题描述】:

我正在两个数据框的公司名称之间执行匹配(一种模糊匹配)。为此,首先我在所有公司名称之间执行完全合并,其中起始字母匹配。这意味着所有以“A”开头的公司都将与其他数据框中以“A”开头的所有公司匹配。这样做如下:

df1['df1_Start'] = df1['company1'].astype(str).str.slice(0,2) 
df2['df2_Start'] = df2['company2'].astype(str).str.slice(0,2)
Merge = pd.merge(df1,df2, left_on='df1_Start',right_on='df2_Start')

现在我想从 FullMerge 中获取 df1 中的公司包含 df2 中的公司的所有行。这是因为 df1 中的公司名称已拉长。

Merge1=Merge[Merge['company1'].str.contains(Merge['company2'].str)]

这对我不起作用。如何执行此任务?另外,请建议我可以使用哪些其他方式来匹配公司名称。因为公司可能在两个数据框中是相同的,但不是以完全相同的方式编写的。

【问题讨论】:

    标签: python pandas fuzzywuzzy


    【解决方案1】:

    我认为您需要 |join 来为 str.contains 生成由 |(或在 regex 中)分隔的所有值:

    Merge1=Merge[FullMerge['company1'].str.contains("|".join(Merge['company2'].tolist())]
    

    【讨论】:

    • 谢谢!我该如何修改它,以便 company1 应该只在其开头包含 company2,而不是在中间的某个地方?因为上面给了我很多误报。
    • 我认为你需要^ - 字符串的正则表达式开始 -Merge1=Merge[FullMerge['company1'].str.contains("|".join(Merge['^' + 'company2'].tolist())]
    猜你喜欢
    • 2015-12-04
    • 2020-08-02
    • 1970-01-01
    • 2015-07-10
    • 2016-01-23
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    相关资源
    最近更新 更多