Python中处理百万行表格时按唯一SFN分组聚合的最有效方法是什么
方案评估与优化实现
你当前的字典遍历思路逻辑完全自洽,但纯Python原生for循环处理百万级表格数据时,Python解释器的动态类型检查、函数调用开销会被放大,因此耗时较长,推荐使用更高效的向量化处理方案:
1. 首选pandas方案(工业界通用,学习成本低)
pandas底层用C实现运算逻辑,跳过了Python层的循环开销,100万行数据常规消费级CPU即可在10秒内完成聚合,完全满足你的需求,示例代码如下:
import pandas as pd # 读取源数据,支持csv/excel/parquet等多种格式 df = pd.read_csv("源数据文件路径.csv") # 按SFN分组聚合,unique方法默认保留值的首次出现顺序 agg_result = df.groupby("SFN", as_index=False).agg( PermitNo = ("PermitNo", lambda col: col.unique().tolist()), Elevation = ("Elevation", lambda col: col.unique().tolist()), Year = ("Year", lambda col: col.unique().tolist()) # 其余需要聚合的字段按照上述格式补充即可 ) # 导出聚合结果 agg_result.to_csv("聚合结果.csv", index=False)
2. 更高性能方案(千万级以上数据适用)
如果后续数据量继续上涨,可以用polars库实现更高效率的处理,它是基于Rust开发的列式运算库,同等数据量下比pandas快3~5倍,内存占用也更低:
import polars as pl df = pl.read_csv("源数据文件路径.csv") agg_result = df.group_by("SFN").agg( pl.col("PermitNo").unique(maintain_order=True), pl.col("Elevation").unique(maintain_order=True), pl.col("Year").unique(maintain_order=True) ) agg_result.write_csv("聚合结果.csv")
方案对比说明
纯Python手写循环的方案时间复杂度和上述工具库的方案本质上是一致的,但解释器层面的额外开销会让实际耗时高出20倍以上,在内存充足的情况下,直接使用成熟的结构化数据处理库是性价比最高的选择。
内容的提问来源于stack exchange,提问作者Amadeus
相关产品推荐
相关产品推荐

