pandas 在不合并数据的情况下对数据帧进行内部连接
pandas inner join on data frames without merging data
我有 2 个索引数据框(索引在第 0 列):
0 1 2 3
JoeK Joe Kavanagh joe.kavanagh@nomail.com
BarryD Barry Dempsy bdempsy@nomail.com
OrlaF Orla Farrel ofjk@nomail.com
SethB Seth Black sblack@nomail.com
KateW Kate White kw12@nomail.com
第二个:
0 1 2 3
JoeK Joe Kavanagh jkavanagh@nomail.com
BarryD Barry Dempsy barry.dempsy@nomail.com
JimmyS Jimmy Smith j.Smith@nomail.com
AndyB Andy Brown ABrwn@nomail.com
MaryP Mary Power MaryPower@nomail.com
我想执行如下所示的内部联接 SQL:
SELECT df2.* FROM df2
INNER JOIN df1
ON df2.0 = df1.0
我只从第二个数据框获得结果,而不是两者:
0 1 2 3
JoeK Joe Kavanagh jkavanagh@nomail.com
BarryD Barry Dempsy barry.dempsy@nomail.com
我尝试了 pandas 合并,但它给了我两个数据框的结果!
非常感谢任何帮助。
而不是合并,您只想通过使用 isin
:
测试值对另一个 df 的成员资格来过滤您的第二个 df
In [16]:
df1[df1['0'].isin(df['0'])]
Out[16]:
0 1 2 3
0 JoeK Joe Kavanagh jkavanagh@nomail.com
1 BarryD Barry Dempsy barry.dempsy@nomail.com
你需要指定你想要一个inner merge(默认是做一个outer)。您还需要先将 df1
限制为合并列:
In [11]: df2.merge(df1[['0']], how="inner", on=['0']) # equivalently df1[['0']].merge(df2, how="inner", on=['0'])
Out[11]:
0 1 2 3
0 JoeK Joe Kavanagh jkavanagh@nomail.com
1 BarryD Barry Dempsy barry.dempsy@nomail.com
如果您不进行限制 (df1[['0']]
),它将为重叠的列添加后缀:
In [12]: df2.merge(df1, how="inner", on=['0'])
Out[12]:
0 1_x 2_x 3_x 1_y 2_y 3_y
0 JoeK Joe Kavanagh jkavanagh@nomail.com Joe Kavanagh joe.kavanagh@nomail.com
1 BarryD Barry Dempsy barry.dempsy@nomail.com Barry Dempsy bdempsy@nomail.com
可以使用 suffixes
kwarg 配置后缀。
See also the pandas docs for a "brief primer on merge methods".
我有 2 个索引数据框(索引在第 0 列):
0 1 2 3
JoeK Joe Kavanagh joe.kavanagh@nomail.com
BarryD Barry Dempsy bdempsy@nomail.com
OrlaF Orla Farrel ofjk@nomail.com
SethB Seth Black sblack@nomail.com
KateW Kate White kw12@nomail.com
第二个:
0 1 2 3
JoeK Joe Kavanagh jkavanagh@nomail.com
BarryD Barry Dempsy barry.dempsy@nomail.com
JimmyS Jimmy Smith j.Smith@nomail.com
AndyB Andy Brown ABrwn@nomail.com
MaryP Mary Power MaryPower@nomail.com
我想执行如下所示的内部联接 SQL:
SELECT df2.* FROM df2
INNER JOIN df1
ON df2.0 = df1.0
我只从第二个数据框获得结果,而不是两者:
0 1 2 3
JoeK Joe Kavanagh jkavanagh@nomail.com
BarryD Barry Dempsy barry.dempsy@nomail.com
我尝试了 pandas 合并,但它给了我两个数据框的结果! 非常感谢任何帮助。
而不是合并,您只想通过使用 isin
:
In [16]:
df1[df1['0'].isin(df['0'])]
Out[16]:
0 1 2 3
0 JoeK Joe Kavanagh jkavanagh@nomail.com
1 BarryD Barry Dempsy barry.dempsy@nomail.com
你需要指定你想要一个inner merge(默认是做一个outer)。您还需要先将 df1
限制为合并列:
In [11]: df2.merge(df1[['0']], how="inner", on=['0']) # equivalently df1[['0']].merge(df2, how="inner", on=['0'])
Out[11]:
0 1 2 3
0 JoeK Joe Kavanagh jkavanagh@nomail.com
1 BarryD Barry Dempsy barry.dempsy@nomail.com
如果您不进行限制 (df1[['0']]
),它将为重叠的列添加后缀:
In [12]: df2.merge(df1, how="inner", on=['0'])
Out[12]:
0 1_x 2_x 3_x 1_y 2_y 3_y
0 JoeK Joe Kavanagh jkavanagh@nomail.com Joe Kavanagh joe.kavanagh@nomail.com
1 BarryD Barry Dempsy barry.dempsy@nomail.com Barry Dempsy bdempsy@nomail.com
可以使用 suffixes
kwarg 配置后缀。
See also the pandas docs for a "brief primer on merge methods".