Pandas:合并后数据帧太长

Nil*_*dat 5 python merge pandas

假设我必须使用一个比另一个长的 DataFrames,我想加入特定的列,如下例所示:

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]})
Run Code Online (Sandbox Code Playgroud)

然后我加入他们:

pd.merge(A, B, on='col1', how='outer')
Run Code Online (Sandbox Code Playgroud)

并按预期获得:

       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
Run Code Online (Sandbox Code Playgroud)

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

len(pd.merge(df1, df2, on='col1', how='outer'))
  51881
Run Code Online (Sandbox Code Playgroud)

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

Lia*_*ley 3

听起来你想要一个左连接。

尝试:

pd.merge(df1, df2, left_on='col1',right_on='col1',how='left')
Run Code Online (Sandbox Code Playgroud)