比较两个巨型数据框

时间:2019-10-15 17:47:35

标签: pandas loops dataframe compare

我有两个巨型数据帧,一个有38k行,另一个有42k。我正在尝试将比较这两个df的代码合并在一起,并隔离在另一个中不退出的唯一行。我尝试了嵌套循环,但是数据量太多,要花很长时间才能完成。我正在寻找一种更简单,更有效的方法来完成这项工作。情况如下: Df1具有以下重要列:Business_unit,operating_unit,Process_num,Res_type。 Df2具有相似的列,但名称不同。例如,Business_unit现在是Unit。 Operating_unit现在是Oper 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

1 个答案:

答案 0 :(得分:0)

您可以结合使用合并和过滤:

import pandas as pd

df1 = pd.DataFrame({'col1': [0, 1], 'col_left': ['a', 'b']})
df2 = pd.DataFrame({'col1': [1, 2, 2], 'col_right': [2, 2, 2]})

df3 = df1.merge(df2, on="col1", how="outer", indicator=True)

df3[df3._merge != "both"]

产生:

   col1 col_left  col_right      _merge
0     0        a        NaN   left_only
2     2      NaN        2.0  right_only
3     2      NaN        2.0  right_only