假设我有两个数据框,其中一个比另一个长,我想在特定列上将它们连接起来,就像以下示例:
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
然而,我有两个数据框需要合并,分别有28,011行和15,676行。按照上述方法合并它们,我希望得到一个具有28,011行的数据框,并在df2中没有观察值的单元格中获得NaN。但实际上发生的是:
len(pd.merge(df1, df2, on='col1', how='outer'))
51881
这怎么可能呢?我要合并的列是唯一标识符,在Stata中进行相同的操作没有问题。我在这里漏掉了什么?
how='left'
?这样的外连接会包含 df2 中所有在 df1 中找不到匹配的观测值。还有,请确认一下col1
列中是否存在重复值。 - chrisb