比较 2 个不同表列的有效方法

Posted

技术标签:

【中文标题】比较 2 个不同表列的有效方法【英文标题】:Efficient method comparing 2 different tables columns 【发布时间】:2021-01-14 01:47:00 【问题描述】:

大家好,

我有 2 个 dfs,我需要检查第一个中的值是否与第二个匹配,仅针对每个特定列,并将匹配的值保存在新列表中。这就是我所做的,但这需要花费很多时间,如果有更有效的方法,我正在徘徊。这些列表就像上图中的 2 个不同表格一样。

for x in df_bd_names['Building_Name']:
    for y in df_sup['Source_String']:
        if x == y:
            matching_words_sup.append(x)

谢谢

【问题讨论】:

由于您在熊猫中工作,我会避免循环遍历数据帧的每一行。我会将其设为内部连接(使用pd.merge)。这将输出 2 个数据帧之间的所有公共行。 嗨@anddt,感谢您的回复。你知道我是否可以将第一个表中的一列与第二个表中的一列合并,因为 2 个 dfs 在结构上不同,我只比较每个列。 【参考方案1】:
    def __init__(self, df1, df2):
        self.df1 = df1
        self.df2 = df2
    def compareDFsEffectively(self):
        np1 = self.df1.to_numpy()
        np2 = self.df2.to_numpy()
        np_new = np.intersect1d(np1,np2)
        print(np_new)
        df_new = pd.DataFrame(np_new)
        print(df_new)

【讨论】:

Numpy 数组速度相当快,可以快速生成结果。【参考方案2】:

让我们创建两个数据框:

df1 = pd.DataFrame(
    'Building_Name': ['Exces', 'Excs', 'Exec', 'Executer', 'Executor']
)

df2 = pd.DataFrame(
    'Source_String': ['Executer', 'Executor', 'Executor Of', 'Executor For', 'Exeutor']
)

在数据框之间执行内部合并并将第一列转换为列表:

pd.merge(df1, df2, left_on='Building_Name', right_on='Source_String', how='inner')['Building_Name'].tolist()

输出:

['Executer', 'Executor']

【讨论】:

非常感谢,它运行良好,效率更高

以上是关于比较 2 个不同表列的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 group_by 将两个不同表列的总和获取到单个列

如何使一个材料表列的编辑模式字段类型依赖于另一列的值,而不影响其他行?

MySQL 表列数和行大小有哪些限制?

将表列的部分添加为新列 - Power Query

在 SQLAlchemy 中引用同一表列的多个外键

比较两个不同的数据库