You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python技术问询:匹配df1证券与df2新闻标题并添加对应Ticker

解决方案

1. 为df2添加对应Tickers列

利用pandas的矢量化操作替代循环,高效匹配新闻标题与证券名称:

import pandas as pd

# 构建证券名称到代码的映射字典
security_ticker_map = df1.set_index('Security')['Tickers'].to_dict()

# 生成匹配完整证券名称的正则表达式(\b确保匹配完整单词,避免部分匹配)
pattern = r'\b(' + '|'.join(security_ticker_map.keys()) + r')\b'

# 提取标题中的证券名称,映射为对应代码
df2['Tickers'] = df2['headlines'].str.extract(pattern, expand=False).map(security_ticker_map)

如果新闻标题中没有匹配到任何df1里的证券,Tickers列对应值会显示NaN。

2. 删除df1中未在df2标题出现的行

先筛选出所有在新闻标题中出现过的证券,再过滤df1:

# 提取df2中所有匹配到的唯一证券名称
matched_securities = df2['headlines'].str.extractall(pattern)[0].unique()

# 保留df1中出现过的证券行
df1_filtered = df1[df1['Security'].isin(matched_securities)]

原代码的问题说明

  • 循环逻辑错误:按索引一一对应匹配df1和df2的行,而非遍历所有证券去匹配每条新闻;
  • 效率极低:循环处理30k行新闻+500条证券,远不如pandas矢量化操作高效;
  • 赋值错误:df2["Tickers"] = df1["Tickers"][i]会把整列赋值为同一个值,而非对应行的代码;
  • 变量未定义:data.drop(...)中的data未声明,且逻辑不符合需求(无需删除df2行,而是过滤df1)。

内容的提问来源于stack exchange,提问作者Giando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:55:57