Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不合并数据的情况下对数据帧进行内部联接_Python_Python 2.7_Pandas_Inner Join - Fatal编程技术网

Python 在不合并数据的情况下对数据帧进行内部联接

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

我有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   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,内部联接是一个过滤器,特别是在没有其他列要合并的情况下。