【问题标题】:Pandas: DataFrame too long after merge熊猫:合并后数据帧太长
【发布时间】:2014-12-04 16:36:17
【问题描述】:

假设我必须在特定列上加入一个比另一个长的 DataFrame,如下例所示:

A = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10], 'col3': [11, 12, 13, 14, 15]})

B = pd.DataFrame({'col1': [1, 3, 5], 'col2': [16, 17, 18], 'col4': [19, 20, 21]})

然后我加入他们:

pd.merge(A, B, on='col1', how='outer')

如预期的那样得到:

       col1     col2_x  col3    col2_y  col4
0       1       6       11      16      19
1       2       7       12      NaN     NaN
2       3       8       13      17      20
3       4       9       14      NaN     NaN
4       5       10      15      18      21

5 rows × 5 columns

但是,我尝试合并两个 DataFrame,分别有 28,011 和 15,676 行。以与上述相同的方式合并它们,我希望在 df2 没有观察到的那些单元格中返回一个具有 28,011 行和 NaN 的 DataFrame。相反,会发生这样的事情:

len(pd.merge(df1, df2, on='col1', how='outer'))
  51881

这怎么可能?我要合并的列是唯一标识符,并且在 Stata 中执行相同的操作没有问题。我在这里错过了什么?

【问题讨论】:

  • 你听起来像你想要的how='left'?外连接还将包括 df2 中的观察结果,而 df1 中的观察结果不多。另外,你能仔细检查一下col1 没有重复吗?

标签: python pandas merge


【解决方案1】:

听起来你想要左连接。

试试:

pd.merge(df1, df2, left_on='col1',right_on='col1',how='left')

【讨论】:

  • 我也是这么想的,但是,唉,不:len(pd.merge(df1, df2, left_on='col1',right_on='col1',how='left')) 给我 51881,len(pd.merge(df1, df2, left_on='col1',right_on='col1',how='inner')) 给我 46249。似乎没有选项可以将较小的数据框合并到较大的数据框同时保留较大的长度。
  • 我的错,我合并的列确实包含一些重复值,所以为了准确识别我需要合并两列,最后pd.merge(df1, df2, on=['col1','col2'], how='left')成功了!
猜你喜欢
  • 2018-11-16
  • 2019-07-20
  • 2021-06-22
  • 1970-01-01
  • 2019-06-23
  • 2017-10-21
  • 2019-03-12
  • 2016-08-20
  • 2018-02-11
相关资源
最近更新 更多