[英]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.