如何使用pandas基于另一个dataframe筛选符合条件的股票数据行
Pandas多DataFrame按股票代码筛选实现方案
小体量数据(10万行以内)最简实现
直接用pandas内置的isin()方法完成布尔索引筛选即可,代码简洁易读,完全满足小数据场景需求:
- 变量约定:完整股票数据DataFrame为
df_full,目标股票代码DataFrame为df_target,股票代码列名统一为ticker_symbol - 实现代码:
# 单行完成筛选,如需重置索引可追加 .reset_index(drop=True) df_filtered = df_full[df_full['ticker_symbol'].isin(df_target['ticker_symbol'])]
可扩展高效实现(百万行及以上大数据场景)
针对数据量持续增长的场景,可通过以下优化方案提升执行效率,最高可适配TB级数据处理:
方案1:集合查询优化
isin()方法传入集合的成员查询时间复杂度为O(1),远高于传入Series的查询效率,数据量超过10万行时性能提升明显:
# 先将目标股票代码转为集合 target_set = set(df_target['ticker_symbol'].tolist()) df_filtered = df_full[df_full['ticker_symbol'].isin(target_set)]
方案2:内连接merge优化
如果后续需要关联第二个DataFrame的其他字段,使用pandas内置的merge内连接操作效率更高,底层做了大量向量化优化,大数据场景下性能优于isin():
df_filtered = pd.merge( left=df_full, right=df_target, on='ticker_symbol', how='inner' )
如果两边股票代码列名不一致,可通过left_on、right_on参数分别指定关联列。
超大规模数据适配方案
当数据量超过内存承载上限时,可使用Dask框架替代pandas完成计算,Dask语法和pandas几乎完全兼容,无需大规模修改代码即可实现分布式并行计算,支持TB级数据处理。
内容的提问来源于stack exchange,提问作者user9026
相关产品推荐
相关产品推荐

