繁体   English   中英

比较具有不同格式列值的两个数据框

[英]Compare two dataframes with different format column values

我有两个数据框

df1:

户口号码 姓名 a/ctype
11.22.21 亨利 检查
11.22.22 山姆 保存。
11.22.23 约翰 检查

df2:

户口号码 姓名 a/ctype
11-22-21 亨利 检查
11-22-23 约翰 检查
11-22-24 丽塔 检查

输出:df3:

A/cNO_df1 A/cNO_df2 结果。 名称_df1 名称_df2 结果 a/ctype_df1 a/ctype_df2 结果。
11.22.21 11-22-21 匹配 亨利 亨利 匹配。 检查 检查 匹配。
11.22.22 Notindf2 山姆。 Notindf2 检查 Notindf2
11.22.23 11-22-23 匹配 约翰。 约翰 匹配。 检查 检查 匹配。
. 11-22-24 Notindf1 . 丽塔 Notindf1 检查 Notindf2

我尝试删除帐户的非数字字符以使用以下方法比较两个数据集: df1['AccountNo'] = df1.AccountNo.replace(regex=[r'\D+', value='') df2['AccountNo'] = df2.AccountNo.replace(正则表达式=[r'\D+', value='')

然后连接两个数据帧。 但是,当我删除字符时,我无法以相同的格式打印它,并且对于不在 df1 中的 ac 和不在 df2 中的 ac 我无法连接它。 我尝试使用 numpy where 来比较和连接。

有没有办法可以做到?

您可以与外部系列合并为键:

df1.merge(df2, left_on='AccountNo', right_on=df2['AccountNo'].str.replace('-', '.'),
          suffixes=('_df1', '_df2'), how='outer')

输出:

  AccountNo AccountNo_df1 name_df1 a/ctype_df1 AccountNo_df2 name_df2 a/ctype_df2
0  11.22.21      11.22.21    Henry    checking      11-22-21    Henry    checking
1  11.22.22      11.22.22      Sam      Saving           NaN      NaN         NaN
2  11.22.23      11.22.23     John    Checking      11-22-23     John    Checking
3  11.22.24           NaN      NaN         NaN      11-22-24     Rita    Checking

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM