Pandas MultiIndex DataFrame 按经纬度分组提取FFDI Top N行
实现方法
针对已全局按FFDI降序排序的大体积MultiIndex DataFrame,最高效的实现方式为直接按经纬度维度分组取每组前N行,适配当前6亿+行的数据规模。
核心代码
# 设置需要提取的排名阈值 N = 3 # 按经纬度两个索引层级分组,取每组前N行 # 用索引名分组可避免层级序号错位问题 result_df = df.groupby(level=["latitude", "longitude"], sort=False).head(N)
注意事项
- 必须加
sort=False参数:关闭分组结果的自动排序,大幅降低大数据量下的分组计算开销,同时保留原数据的行顺序 - 无需额外排序逻辑:原DataFrame已全局按
FFDI降序排列,分组后每个经纬度组的前N行天然对应组内FFDI最高的N条记录 - 输出结果保留原MultiIndex结构,和预期格式完全一致
大体积数据优化
当前DataFrame仅保留FFDI、REF_ID两列,已经是最小列宽。groupby.head为pandas底层向量化实现,比apply类方法效率高1~2个数量级,若仍出现内存不足,可分块处理经纬度维度后合并结果。
内容的提问来源于stack exchange,提问作者alextc
相关产品推荐
相关产品推荐

