如何快速将多个DataFrame合并为pandas多级索引DataFrame?
多级索引DataFrame构建性能优化方案
原代码性能低下的核心原因是循环内反复调用pd.concat和append,每次操作都会复制已生成的全量DataFrame,数据量越大效率越低。以下是高兼容的高性能实现方案,输出结果和原代码完全一致:
优化后代码
import pandas as pd from datetime import datetime df_list = [] for key, data, date in data_tuples: # 构造子表时直接指定浮点类型,省去后续类型转换开销 df = pd.DataFrame(data, columns=['Price', 'Quantity'], dtype=float) timestamp = datetime.strptime(date, '%a, %d %b %Y %H:%M:%S GMT') # 直接为子表设置三级索引,无需反复拼接加keys df.index = pd.MultiIndex.from_product( [[key], [timestamp], df.index], names=['symbol', 'time', 'row'] ) df_list.append(df) # 仅调用一次concat完成全量数据合并,无重复复制开销 final_df = pd.concat(df_list)
优化说明
- 循环内仅做轻量的子表构造和索引设置操作,没有全量数据复制行为
- 仅进行一次合并操作,时间复杂度从原方案的O(n²)降为O(n),万级以上数据量场景下性能提升可达百倍以上
- 构造子表时直接指定数据类型,省去最后对数值列单独调用
apply的冗余开销
内容的提问来源于stack exchange,提问作者Jonny Shanahan
相关产品推荐
相关产品推荐

