【发布时间】:2020-02-12 10:54:57
【问题描述】:
我有两个巨大的数据框,一个有 38k 行,另一个有 42k。我正在尝试编写一个代码来比较这两个 df 并隔离不会在另一个中退出的唯一行。我尝试了嵌套循环,但数据量太多了,需要很长时间才能完成。我正在寻找一种更简单、更有效的方式来完成这项工作。情况如下: Df1 有以下重要列:Business_unit、operating_unit、Process_num、Res_type。 Df2 具有相似的列,但名称不同。例如,Business_unit 现在是 Unit。 Operating_unit 现在是操作单元。 此外,这些列的数据类型在两个表中是不同的。例如,Business Unit 在一个表中是 01(str),但在另一个表中是 1(int)。因此,如果我要使用 concat 然后删除重复项,我将不得不将两个表设置为相同的格式。我该怎么做呢?我目前正在使用以下嵌套循环,但这只能处理大约 1000 行。除此之外的任何事情都需要永远运行。
match_count=0
for index, row_a in SQL_download.head(n=1000).iterrows():
for index, row_b in web_pull.head(n=1000).iterrows():
if int(row_a['Process_Number'])==row_b['Process'] and int(row_a['Resource_Type'])==row_b['Res Type'] and row_a['Amount']==row_b['Sum Amount'] \
and int(row_a['BUSINESS_UNIT'])==row_b['Unit'] and int(row_a['OPERATING_UNIT'])==row_b['Oper Unit'] and int(row_a['ACCOUNT'])==row_b['Account']:
findmatch=True
match_count=match_count+1
break
【问题讨论】:
-
concat然后按~df.duplicated(keep=False)过滤。您应该提供minimal reproducible example,以便有人可以为您的问题提供答案。否则有太多的假设要做。 -
两张表相同但不完全相同。所以我需要让它们符合相同的格式和数据类型,然后才能消除重复,对吗?
-
我下面的建议有什么问题吗?如果是,请发表评论,否则请点赞。
-
@Setop,我喜欢你的方法。但是,它有几个问题。 1. 我需要过滤几列,而不仅仅是一列。 2.我的两张表相同但不完全相同。假设一个表中的业务单元 01 只是另一个表中的整数 1。
标签: pandas loops dataframe compare