代码之家  ›  专栏  ›  技术社区  ›  SBad

pd.merge不正常工作

  •  1
  • SBad  · 技术社区  · 7 年前

    所有的,

    我有两个数据框:allholdings和longswap

    所有持股

       prime_broker_id    country_name position_type
    0         CS         UNITED STATES          LONG
    1         ML         UNITED STATES          LONG
    2         CS               AUSTRIA         SHORT
    3         HSBC              FRANCE          LONG
    4         CITI       UNITED STATES         SHORT
    11        DB         UNITED STATES         SHORT
    12        JPM        UNITED STATES         SHORT
    13        CS                 ITALY         SHORT
    14        CITI              TAIWAN         SHORT
    15        CITI      UNITED KINGDOM          LONG
    16        DB                FRANCE          LONG
    17        ML           SOUTH KOREA          LONG
    18        CS               AUSTRIA         SHORT
    19        CS                 JAPAN          LONG
    26        HSBC              FRANCE         SHORT
    

    Longswap

       prime_broker_id          country_name  longSpread
    0                ML             AUSTRALIA        30.0
    1                ML               AUSTRIA        30.0
    2                ML               BELGIUM        30.0
    3                ML                BRAZIL        50.0
    4                ML                CANADA        20.0
    5                ML                 CHILE        50.0
    6                ML             CHINA - A        75.0
    7                ML        CZECH REPUBLIC        45.0
    8                ML               DENMARK        30.0
    9                ML                 EGYPT        45.0
    10               ML               FINLAND        30.0
    11               ML                FRANCE        30.0
    12               ML               GERMANY        30.0
    13               ML             HONG KONG        30.0
    14               ML               HUNGARY        45.0
    15               ML                 INDIA        75.0
    16               ML             INDONESIA        75.0
    17               ML               IRELAND        30.0
    18               ML                ISRAEL        45.0
    19               ML                 ITALY        30.0
    20               ML                 JAPAN        30.0
    21               ML           SOUTH KOREA        50.0
    22               ML            LUXEMBOURG        30.0
    23               ML              MALAYSIA        75.0
    24               ML                MEXICO        50.0
    25               ML           NETHERLANDS        30.0
    26               ML           NEW ZEALAND        30.0
    27               ML                NORWAY        30.0
    28               ML           PHILIPPINES        75.0
    

    我之前已经加入了许多数据帧,但是我仍然不明白为什么它不适用于这个例子。

    这是我的代码:

    allHoldings=pd.merge(allHoldings, Longswap, how='left', left_on = ['prime_broker_id','country_name'], right_on=['prime_broker_id','country_name'])
    

    我的结果是

      prime_broker_id    country_name position_type  longSpread
    0        CS         UNITED STATES          LONG         NaN
    1        ML         UNITED STATES          LONG         NaN
    2        CS               AUSTRIA         SHORT         NaN
    3        HSBC              FRANCE          LONG         NaN
    4        CITI       UNITED STATES         SHORT         NaN
    5        DB         UNITED STATES         SHORT         NaN
    6        JPM        UNITED STATES         SHORT         NaN
    7        CS                 ITALY         SHORT         NaN
    

    正如你所看到的,长柱是一个没有任何意义的南部。从longswap数据帧中,应该填充此列。

    我不知道为什么左连接不在这里工作。

    如有任何帮助,我们将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  0
  •   SBad    7 年前

    下面是删除空白并使左连接成功的答案

    allHoldings.prime_broker_id.str.strip()
    
    array(['CS', 'ML', 'HSBC', 'CITI', 'DB', 'JPM', 'WFPBS'], dtype=object)