比较两个Pandas Dataframes在python中的任何差异,同时忽略比较中的几个列

toiithl6  于 6个月前  发布在  Python
关注(0)|答案(1)|浏览(53)

使用Python,我想比较两个pandas数组df 1和df 2,df 1和df 2中的数据如下所示。
df 1框架:
| 数据库|表|柱|数据类型|
| --|--|--|--|
| DEV|员工|EmpNo|整数|
| DEV|员工|EmpName|字符串|
| DEV|经理|MngrNo|整数|
| DEV|经理|MngrName|字符串|
df 2框架:
| 数据库|表|柱|数据类型|
| --|--|--|--|
| PROD|员工|EmpNo|双|
| PROD|员工|EmpName|字符串|
| PROD|经理|MngrNo|整数|
| PROD|经理|MngrName|字符串|
| PROD|经理|MngrExp|双|
我想比较df 1和df 2的数据框,但是在比较的时候我想排除“Database”列,只比较两个数据框中其余的列值。因此我的最终结果应该像下面的数据框compared_df。
compared_df查询框应该有一个额外的列,它指示给定的行是否在两个查询框中都有匹配的记录,或者只在其中一个查询框中存在,而忽略提到的列值。
compared_df:
| 数据库|表|柱|数据类型|比较结果|
| --|--|--|--|--|
| DEV|员工|EmpNo|整数|仅在DF 1中|
| DEV|员工|EmpName|字符串|两|
| DEV|经理|MngrNo|整数|两|
| DEV|经理|MngrName|字符串|两|
| PROD|员工|EmpNo|双|仅在DF 2中|
| PROD|员工|EmpName|字符串|两|
| PROD|经理|MngrNo|整数|两|
| PROD|经理|MngrName|字符串|两|
| PROD|经理|MngrExp|双|仅在DF 2中|
我试着删除“Database”列,后来做了pandas merge,但在最后的compared_df中,我可以得到删除的列信息。也试过比较函数,但无法实现这一点,因为有时两个数组中的列数可能不同。

vbopmzt1

vbopmzt11#

你能稍微不同地看待这些信息吗?
让我们使用pd.DataFrame.compare

df1.reindex_like(df2).compare(df2, keep_equal=False)\
   .rename(columns={'self':'Only in df1', 'other':'Only in df2'}).stack(1)

字符串
输出量:

Column Database Datatype    Table
0 Only in df1      NaN      DEV  Integer      NaN
  Only in df2      NaN     PROD   Double      NaN
1 Only in df1      NaN      DEV      NaN      NaN
  Only in df2      NaN     PROD      NaN      NaN
2 Only in df1      NaN      DEV      NaN      NaN
  Only in df2      NaN     PROD      NaN      NaN
3 Only in df1      NaN      DEV      NaN      NaN
  Only in df2      NaN     PROD      NaN      NaN
4 Only in df2  MngrExp     PROD   Double  Manager


其中所有NaN均为两个表中的值。

相关问题