我正在通过pyodbc 2个数据帧导入:df1和df2。
它们很大,我需要进行比较。
PS:它们的大小不一样。
3列大小的数据框:
我想做什么:
如果CODUSU列相等,则df2 [Situação] ='K'
我做了什么,但是太慢了:
for i in range(0,len(df2)):
for k in range(0,len(df1)):
if df2.loc[i][0] == df1.loc[k][0]:
df2[i]["Situação"] = "K"
我还需要:
如果在df1 [CODUSU]中的项目中而不在df2 [CODUSU]中,则df2 [Situação] ='Q'
如果在df2 [CODUSU]中的项目中而不在df1 [CODUSU]中,则df2 [Situação] ='B'
答案 0 :(得分:1)
您应该在数据框上进行外部合并,以获取指标变量:
resul = df2.merge(df1, how='outer', on='A', suffixes=('', '_y'),indicator=True)
对于仅来自DTDOSE
的行,不要忘记df1
列:
resul.loc[resul['indicator'] == 'right_only', 'DTDOSE'] = resul.loc[
resul['indicator'] == 'right_only', 'DTDOSE_y']
为Situação
列计算新值的时间:
resul.loc[resul['indicator'] == 'both', 'Situação'] = 'K'
resul.loc[resul['indicator'] == 'right_only', 'Situação'] = 'Q'
resul.loc[resul['indicator'] == 'left_only', 'Situação'] = 'B'
最后摆脱辅助列:
resul = resul[['CODUSU', 'DTDOSE', 'Situação']