如何在两个熊猫数据框列中找到非常相似但不相等的行?

时间:2018-07-04 12:56:43

标签: python pandas dataframe

我正在尝试比较来自两个不同的dataframes的两个列以获取相似的值。这些值是字符串,因此它们不仅相同,而且非常相似。如何获得这些相似的值?

我使用的数据帧如下:

Dataframe 1, column "Company", row = "Company_name"

Dataframe 2, column "Company", row = "Company_name_INC"

我想要得到什么:

Dataframe 3, column "Company_source_1" row = "Company_name", column "Company_source_2", row = "Company_name_INC"

我需要找到几乎相同的名称,以便找到出现在两个数据框中的公司。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

正则表达式(https://docs.python.org/3/howto/regex.html)可用于完全按照您的要求进行操作。例如,如果您要寻找与“ Regex”相关的公司,例如:

Regex
Regex_inc
NotRegex

您可以执行以下操作:

[请注意,我已经将DataFrame列Name转换为Series并使用了.str.contains()方法,该方法可用于索引原始DataFrame(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html)中的适当行]

import pandas as pd

data = [['Regex', 'company_1'],
    ['Regex_inc', 'company_2'],
    ['NotRegex', 'company_3']]
df = pd.DataFrame(data).rename(columns={0:'Name', 1:'Company'})
df_sorted = df[pd.Series(df['Name']).str.contains(r'^Regex')]
print df
print df_sorted

返回

        Name    Company
0      Regex  company_1
1  Regex_inc  company_2
2   NotRegex  company_3

df,和:

       Name    Company
0      Regex  company_1
1  Regex_inc  company_2

df_sorted

pd.Series.str.contains()方法的参数为'^Regex',该参数指出要使字符串返回True值,字符串必须以'Regex'开头。

我将此正则表达式备忘单(https://www.rexegg.com/regex-quickstart.html)用于特殊字符。我不是Regex的专家,但是可以在线找到大量材料,以及此答案中包含的链接。此外,这里(https://regex101.com/)是一个正则表达式测试器,可用于测试您的模式。