【发布时间】: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没有重复吗?