【问题标题】:How can I fill in values in pandas merge when merged rows don't match当合并的行不匹配时,如何在熊猫合并中填写值
【发布时间】:2017-12-10 04:22:47
【问题描述】:

我有两个具有共同 "License Number" 列的数据框。我想将它们与indicator 合并,这样我以后可以选择left_onlyright_only 来查找仅出现在其中一个数据框中的条目。

但是,我发现在合并时,只要 A 和 B 中的条目相同,一切都会正常进行,因此从理论上讲,这对于所有条目都相等的相同大小的数据帧非常有效。

如果 A 中有条目,但 B 中没有,即使用于合并的键 (License Number) 不匹配,合并仍会从 B 中提取行数据并将其放在 A 中的数据之外在这些行之间。

这是我的做法 (code you can run with sample data is here):

merged_sheet = pd.merge(df1, df2, on='License Number', left_index=True, right_index=True, how='outer', indicator=True)

在我附加的数据示例中,前三行很好,但是当它到达第四行时,两个数据框之间没有匹配,而是将其标记为 NaN 或其他任何内容(什么 Excel将在 VLOOKUP 中标记为 #N/A)它只是简单地从完全不相关的行中提取信息。

我的预期结果是,当License Number 列不匹配时,合并只会留下空白或一些错误消息,但不会将所有数据向上移动一行。

【问题讨论】:

  • 在这个问题中你不应该加入索引。删除 left_index=True 和 right_index=True。只需加入“许可证号”即可。我认为这将为您提供预期的结果。
  • 谢谢,没错。我对按索引加入的含义感到困惑,现在我发现它不适用于此处。
  • 一点也不,毕竟您提出了正确的解决方案。提交,我会接受。

标签: python python-3.x pandas merge


【解决方案1】:

在这种特殊情况下,您不应该加入索引,删除 left_index = Trueright_index = True

merged_sheet = pd.merge(df1, df2, on='License Number', how='outer', indicator=True)

然后你可以看到outer join 中所有不匹配的行,使用如下语句:

merged_sheet.query('_merge != "both"')

【讨论】:

    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2019-08-25
    相关资源
    最近更新 更多