首页 > 解决方案 > 使用包含子字符串而不是整个键列左连接两个数据框

问题描述

我有股票数据框和另一个带有公司名称和股票代码的股票数据框:

#df1
Company_name            Industry
Buckle Inc. (The)       Retail
TILLY'S INC             Apparel
Teck Resources Ltd      Mining

#df2
Company_name            Ticker
Buckle Inc              BKE
TILLY'S, INC.           TLYS
Teck Resources Ltd      TECK

我想将代码(来自 df2)添加到 df1 中的每个公司名称。Buckle Inc. (The)问题是公司名称有时会有所不同,例如: Buckle Inc但它们总是共享一些子字符串。

我尝试合并,但仅在 2 个公司名称 100% 相同时才起作用,就像Teck Resources Ltd在我的示例中一样。

# I tried this:
df.merge(df1, on='Company_name', how='left')

#return :
Company_name            Industry        Ticker
Teck Resources Ltd      Mining          TECK

这是我需要的输出:

Company_name            Industry        Ticker
Buckle Inc. (The)       Retail          BKE
Tilly's Inc.            Apparel         TLYS
Teck Resources Ltd      Mining          TECK

标签: pythonpandas

解决方案


我做了一个假设,Company_name 中没有重复项

    df2['temp']=df2['Company_name'].str.lower().str.extract('(^\w+)')#Extract first word in string in df2.Company_name
    df1['temp']=df1['Company_name'].str.lower().str.extract('(^\w+)')#Extract first word in string in df1.Company_name
    df1=df1.assign(Ticker=df1['temp'].map(dict(zip(df2.temp,df2.Ticker)))).drop('temp',1)#Create dict and map




     Company_name      Ticker
0   Buckle Inc. (The)    BKE
1         TILLY'S INC   TLYS
2  Teck Resources Ltd   TECK

推荐阅读