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

如何检查Numpy数组元素是否存在于Pandas DataFrame列表列并构建矩阵

解决思路与代码实现

方法一:高效遍历(推荐)

利用集合的快速查找特性优化性能,先把每行的tickers转成集合,再批量检查unique_stock_list中的元素是否存在:

import pandas as pd
import numpy as np

# 遍历DF_Matrix的每行(对应每个月末日期)
for idx in DF_Matrix.index:
    # 将当前行的tickers列表转为集合,加速查找
    ticker_set = set(final.loc[idx, 'tickers'])
    # 批量生成布尔值并填充到对应行
    DF_Matrix.loc[idx] = np.array([stock in ticker_set for stock in unique_stock_list])

方法二:apply批量处理

用apply对tickers列批量生成结果,再与预先创建的DF_Matrix对齐:

# 定义处理函数:输入tickers列表,返回对应unique_stock的布尔序列
def check_stocks(tickers):
    ticker_set = set(tickers)
    return pd.Series([stock in ticker_set for stock in unique_stock_list], index=unique_stock_list)

# 批量处理生成结果
result = final['tickers'].apply(check_stocks)
# 与预先创建的DF_Matrix索引对齐并赋值
DF_Matrix = result.reindex_like(DF_Matrix)

关键说明

  • 把tickers转成集合是核心优化:列表的in操作时间复杂度为O(n),集合则是O(1),数据量越大效率提升越明显。
  • 确保final和DF_Matrix的索引一致(均为月末日期),能保证行与日期的精准对齐。
  • 最终DF_Matrix的单元格会被填充为True(股票存在)或False(股票不存在),替换原有NaN值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:54:51