Pandas 合并两个没有某些列的 DataFrame

sno*_*ogg 5 python sql csv left-join pandas

语境

我正在尝试将两个大的 CSV 文件合并在一起。

问题

假设我有一个 Pandas DataFrame,如下所示......

EntityNum    foo   ...
------------------------
1001.01      100
1002.02       50
1003.03      200
Run Code Online (Sandbox Code Playgroud)

还有一个这样的……

EntityNum    a_col    b_col
-----------------------------------
1001.01      alice        7  
1002.02        bob        8
1003.03        777        9
Run Code Online (Sandbox Code Playgroud)

我想像这样加入他们:

EntityNum    foo    a_col
----------------------------
1001.01      100    alice
1002.02       50      bob
1003.03      200      777
Run Code Online (Sandbox Code Playgroud)

所以请记住,我不希望 b_col 出现在最终结果中。II 如何用 Pandas 实现这一点?

使用 SQL,我可能应该这样做:

SELECT t1.*, t2.a_col FROM table_1 as t1
                      LEFT JOIN table_2 as t2
                      ON t1.EntityNum = t2.EntityNum; 
Run Code Online (Sandbox Code Playgroud)

搜索

我知道可以使用合并。这是我尝试过的:

import pandas as pd

df_a = pd.read_csv(path_a, sep=',')
df_b = pd.read_csv(path_b, sep=',')
df_c = pd.merge(df_a, df_b, on='EntityNumber')
Run Code Online (Sandbox Code Playgroud)

但是在避免最终数据框中的一些不需要的列时,我陷入了困境。

Ale*_*der 11

您可以首先通过标签访问相关的数据框列(例如df_a[['EntityNum', 'foo']],然后加入这些列。

df_a[['EntityNum', 'foo']].merge(df_b[['EntityNum', 'a_col']], on='EntityNum', how='left')
Run Code Online (Sandbox Code Playgroud)

请注意, for 的默认行为merge是进行内部联接。