如何检查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
相关产品推荐
相关产品推荐

