如何比较来自两个DF的两列并保持一些列常数和打印行?

时间:2019-05-22 05:34:58

标签: 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    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

所以首先我想检查LOC HECI RR&UNIT的值在我想向前移动的表和comapre ACT列中是否相同,并将差异打印为输出。

例如,您可以看到第1行 在主数据中,ACT为“ 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”更改为“ $”

请协助! 预先谢谢你!

1 个答案:

答案 0 :(得分:0)

对于这种情况,您可以使用merge

df_result = master_df.merge(specific_df, on = ['LOC','HECI','RR'])

df_result将使数据框具有与“ LOC”,“ HECI”和“ RR”列匹配的完整行。接下来,您可以检查df_result(来自ACT_x)和master_df(来自ACT_y)列下的specific_df中的值,看是否有区别并根据需要将其打印出来:

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