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