【问题标题】:Left merging does not work左合并不起作用
【发布时间】:2017-05-07 22:26:48
【问题描述】:

当我合并两个简单的数据框时,一切正常。但是当我将相同的代码应用于我的真实数据帧时,合并无法正常工作:

我想使用左连接将A 列上的df1df2 合并。

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

df2 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3','A4','A5'],
                    'C': ['C0', 'C1', 'C2', 'C3','C4','C5'],
                    'D': ['D0', 'D1', 'D2', 'D3','D4','A5']})

result = pd.merge(df1, df2[["A","C"]], how='left', on='A')

在这种情况下结果是正确的(result 中的行数与df1 相同)。

但是,当我在真实数据上运行相同的代码时,result 中的行数远大于df1,并且与df2 更相似。

result = pd.merge(df1, df2[["ID","EVENT"]], how='left', on='ID')

ID 字段的类型为字符串 (astype(str))。

这可能是什么原因?我不能在这里发布真实的数据集,但根据我的解释,也许仍然可以做一些指示。谢谢。

UDPATE:

我检查了数据框result,我可以看到许多具有相同ID 的重复行。为什么?

【问题讨论】:

  • 也许你在 df1 或 df2 中有 dup ID

标签: python pandas


【解决方案1】:

查看这个稍作修改的示例(我修改了df2A 列中的最后两个值):

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

df2 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3','A0','A0'],
                    'C': ['C0', 'C1', 'C2', 'C3','C4','C5'],
                    'D': ['D0', 'D1', 'D2', 'D3','D4','A5']})

result = pd.merge(df1, df2[["A","C"]], how='left', on='A')

输出:

    A   B   C
0  A0  B0  C0
1  A0  B0  C4
2  A0  B0  C5
3  A1  B1  C1
4  A2  B2  C2
5  A3  B3  C3

df2 中的每个 A0 对应一个 A0 行。这也是您的数据正在发生的情况。

【讨论】:

  • 谢谢。这就是问题的原因。
猜你喜欢
  • 1970-01-01
  • 2017-08-31
  • 2014-11-20
  • 2011-03-13
  • 2012-12-19
  • 2022-01-19
  • 2012-03-12
相关资源
最近更新 更多