python - 使用包含子字符串而不是整个键列左连接两个数据框
问题描述
我有股票数据框和另一个带有公司名称和股票代码的股票数据框:
#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
解决方案
我做了一个假设,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
推荐阅读
- winforms - 在远程 Windows Server 上复制小文件需要时间
- spring-boot - Spring Boot:记录属性
- javascript - 如何在javascript函数中使用/绑定角度变量
- scrapy - Scrapy spider 在队列中侦听种子 URL 以爬行?
- android - 在 Android Studio 的操作栏中的菜单项中添加编辑文本
- php - xor 运算符在 PHP 和 Visual Basic 中的工作方式不同
- jquery - 为什么 jquery click 事件会触发两次
- angular - 从带有 Web API 端点的简单 HTML 表单上传文件显示“ERR_CONNECTION_RESET”
- symfony - 返回带有异常监听器的 json
- css - 移动 safari 不支持 feDisplacementMap svg 过滤器吗?