Python 如何比较两个DFs中的两列并保留一些列常量和打印行?

Python 如何比较两个DFs中的两列并保留一些列常量和打印行?,python,excel,python-3.x,pandas,Python,Excel,Python 3.x,Pandas,我正在进行一个项目,在这个项目中,我必须找到第二张图纸(特定列)中所做的更改,与主/主图纸相比。 之后,我想打印或保存发现更改的完整行。 这里有更多的细节。 两个excel表都有许多列 我的主数据表包含如下数据: TID LOC HECI RR UNIT SUBD S EUSE INV ACT CAC FMT CKT DD SCID CUSTOMER F&E/SERVICE ID BVAP PORD AUTH R

我正在进行一个项目,在这个项目中,我必须找到第二张图纸(特定列)中所做的更改,与主/主图纸相比。 之后,我想打印或保存发现更改的完整行。 这里有更多的细节。 两个excel表都有许多列 我的主数据表包含如下数据:

 TID    LOC HECI    RR  UNIT    SUBD    S   EUSE    INV ACT CAC FMT CKT DD   
SCID    CUSTOMER    F&E/SERVICE ID  BVAP    PORD    AUTH    RULE    ST  RGN
CHCGILDTO3P050101D  CHCGILDTO3P M3MSA0S1RA  0501.01D    1A1              IE D   STR3RA8 S   CL/HFFS/688898 /LGT 2018-07-21      BLOOMBERG LP     DS3-16668545   WMS881282       E.485339        IL  N
CHCGILDTO3P050101D  CHCGILDTO3P M3MSA0S1RA  0501.01D    1A2             IE  J           DNA UNDER DECOM EID 2466    2019-03-22              WMS881282       E.485339        IL  N
CHCGILDTO3P050101D  CHCGILDTO3P M3MSA0S1RA  0501.01D    1A3             IE  J           DNA UNDER DECOM EID 2466    2019-03-22              WMS881282       E.485339        IL  N
CHCGILDTO3P050101D  CHCGILDTO3P M3MSA0S1RA  0501.01D    1A4             IE  J           DNA UNDER DECOM EID 2466    2019-03-22              WMS881282       E.485339        IL  N
CHCGILDTO3P050101D  CHCGILDTO3P M3MSA0S1RA  0501.01D    1A5             IE  J           DNA UNDER DECOM EID 2466    2019-03-22              WMS881282       E.485339        IL  N

我的第二张表的数据如下:

  HECI  UNIT    INV SUB ACT CKT PACT    DD  LOC RR
M3MSA0S1RA  1A1 IE      $   CL/HFFS/688898 /LGT D   72118   CHCGILDTO3P 0501.01D
M3MSA0S1RA  1A2 IE      J   DNA UNDER DECOM EID 2466        32219   CHCGILDTO3P 0501.01D
M3MSA0S1RA  1A3 IE      J   DNA UNDER DECOM EID 2466        32219   CHCGILDTO3P 0501.01D
M3MSA0S1RA  1A4 IE      J   DNA UNDER DECOM EID 2466        32219   CHCGILDTO3P 0501.01D
M3MSA0S1RA  1A5 IE      J   DNA UNDER DECOM EID 2466        32219   CHCGILDTO3P 0501.01D
因此,首先我想检查我要向前移动的表格和comapre ACT列中LOC HECI RR和UNIT的值是否相同,并将差异打印为输出

例如,您可以看到第1行 在主数据法中为“D”,其中第二张表中为“$”

所以我希望输出像这样的东西 相关的完整行,表示其从“D”更改为“$”

这对我来说似乎非常复杂,因为我正处于python和pandas的初级阶段

我尝试过使用循环,但如果我使用了太多的循环,也无法执行,这不是我所相信的方式

这是我的密码:

import pandas as pd

df1 = pd.read_excel("Master Database.xlsx")
df2 = pd.read_excel("CHCGILDTO3P_0501.01D.xlsx")
d1_act = df1['ACT']
d2_act = df2['ACT']
for index1, row1 in df1.iterrows():
    for index2, row2 in df2.iterrows():
        if(row1['LOC'],row1['HECI'],row1['RR']) ==(row2['LOC'],row2['HECI'],row2['RR']):
            for x in d1_act and y in d2_act:
                #print(x,y)
                if x != y:

                    print (x, y) # not getting how to print complete respective row

                else:
                    pass
        else:
            pass
我想要像这样的输出:

M3MSA0S1RA  1A1 IE      $   CL/HFFS/688898 /LGT D   72118   CHCGILDTO3P 0501.01D
从“D”更改为“$”

请协助! 提前谢谢你

您可以将以下内容用于您的案例:

df_result = master_df.merge(specific_df, on = ['LOC','HECI','RR'])
df_result
将具有数据帧,其中包含在“LOC”、“HECI”和“RR”列上匹配的完整行。接下来,您可以检查名为
ACT\u x
(来自
master\u df
)和
ACT\u y
(来自
specific\u df
)的列下的
df\u result
)中的值,查看是否存在差异,并根据需要打印出来:

print(df_result[df_result.ACT_x != df_result.ACT_y])
您可以将以下内容用于您的案例:

df_result = master_df.merge(specific_df, on = ['LOC','HECI','RR'])
df_result
将具有数据帧,其中包含在“LOC”、“HECI”和“RR”列上匹配的完整行。接下来,您可以检查名为
ACT\u x
(来自
master\u df
)和
ACT\u y
(来自
specific\u df
)的列下的
df\u result
)中的值,查看是否存在差异,并根据需要打印出来:

print(df_result[df_result.ACT_x != df_result.ACT_y])

非常感谢你。。这很有帮助。我添加了以下代码用于比较indx=df_result[df_result['ACT_x']!=df_result['ACT_y']]。索引打印(df_result.iloc[indx])是的,我已经更新了答案中的后缀。默认情况下,它将是x和y。如果它有助于解决问题,请将其标记为答案。您不需要像您在评论中提到的那样在print()中先执行.index,然后执行.iloc。我已经用直接声明更新了我的答案,以实现您的愿望。非常感谢。。这很有帮助。我添加了以下代码用于比较indx=df_result[df_result['ACT_x']!=df_result['ACT_y']]。索引打印(df_result.iloc[indx])是的,我已经更新了答案中的后缀。默认情况下,它将是x和y。如果它有助于解决问题,请将其标记为答案。您不需要像您在评论中提到的那样在print()中先执行.index,然后执行.iloc。我已经用直接陈述更新了我的答案,以实现你想要的。