不合并数据帧的数据帧内连接

2024-09-27 00:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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

我尝试了熊猫合并,但它给了我两个数据帧的结果! 非常感谢您的帮助。你知道吗


Tags: 数据comsmithdf2joebarrykavanaghjoek
2条回答

你需要指定你想要一个内部的merge(默认是做一个外部的)。您还需要首先将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

后缀可以用suffixeskwarg配置。你知道吗

See also the pandas docs for a "brief primer on merge methods"

与合并不同,您只想通过使用^{}测试值对另一个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

相关问题 更多 >

    热门问题