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

持续排序10000条记录最快方法:df.nlargest与df.sort_values哪个更快

两种Pandas取最高成交量股票的方案性能对比

问题背景

需求为每秒读取3次更新后的price.csv文件,按volume字段排序后输出成交量最高的第一条股票记录,现有两种实现方案:

# 读取price.csv的股票价格,按成交量排序后输出成交量最高的股票记录
import pandas as pd
while 1==1:    
    try:
        df=pd.read_csv("R:/price.csv").dropna()
        # 第一种方法
        # df=df.nlargest(1,'volume')                                
        # 第二种方法
        # df.sort_values('volume',ascending=False,inplace=True)        
        print("\t",df.iloc[0,0],df.iloc[0,1] )  
    except:
        pass
del df

样本输出如下:

SNDL 79416563.0 
 SNDL 79552154.0 
 ITUB 20537823.0 
 PCG 24423451.0 
 EDU 104113726.0 
 TSM 5074870.0 
 EDU 105639190.0 
 ABEV 30110259.0 
 CEI 10292901.0 
 PCG 24739218.0 
 SWN 19374652.0 

结论

第一种使用df.nlargest(1, 'volume')的方案运行速度更快,更适配每秒读取3次的高频使用场景

性能差异原因

  • nlargest是Pandas专门为「取Top N个最大值」场景做了优化的方法,不需要对全表数据做排序,只要遍历一次数据集就能筛选出volume最高的1条记录,时间复杂度为O(n),CSV里的股票条目越多,性能优势越突出
  • 第二种sort_values方法会先对整个volume列做全量降序排序,时间复杂度为O(n log n),你最终只需要排序后的第一条记录,做了大量无用的排序计算,白白浪费性能

额外优化建议

你还可以调整代码进一步提升运行速度:

  1. 调用pd.read_csv时加上usecols参数,只读取你需要输出的两列数据,不需要加载CSV里的所有字段
  2. 不要使用裸except,建议指定捕获文件读取、索引相关的异常,避免吞掉其他意料之外的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 02:21:04