比较熊猫中具有不同大小的数据框,并根据比较结果创建新列

时间:2020-03-23 14:56:07

标签: python pandas dataframe

我正在通过pyodbc 2个数据帧导入:df1和df2。

它们很大,我需要进行比较。

PS:它们的大小不一样。

3列大小的数据框:

Sizes and format of dataframes

我想做什么:

如果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'

1 个答案:

答案 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']