我有两个巨型数据帧,一个有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
答案 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