Python 在不合并数据的情况下对数据帧进行内部联接
我有2个索引数据帧(第0列上的索引): 第二个:Python 在不合并数据的情况下对数据帧进行内部联接,python,python-2.7,pandas,inner-join,Python,Python 2.7,Pandas,Inner Join,我有2个索引数据帧(第0列上的索引): 第二个: 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
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合并,但它给出了两个数据帧的结果!
非常感谢您的帮助。与合并不同,您只需通过测试值的成员资格来过滤第二个df,而不是使用以下方法:
与合并不同,您只需通过测试值相对于其他df的成员资格来过滤第二个df,方法是:
您需要指定您想要一个内部的(默认是做一个外部的)。您还需要首先将
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
后缀可以配置为后缀
kwarg
。您还需要首先将
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
后缀可以配置为后缀
kwarg
.OP似乎想根据他们的期望进行筛选output@EdChum我的理解是,连接将比isin调用快得多…这不是我的观点,只是在我看来,输出似乎需要一个过滤器,而不是合并op。事实上,在这之后,op可能会出现,但正如yetWell所说,没有响应,内部连接是一个过滤器,尤其是在没有其他列合并的情况下。OP似乎想要进行过滤,尽管从它们所需要的列来判断output@EdChum我的理解是加入要比isin呼叫快得多…这不是我的观点,只是在我看来,输出似乎想要一个过滤器,而不是合并。实际上,op可能在这之后,但没有响应,因为yetWell,内部联接是一个过滤器,特别是在没有其他列要合并的情况下。