Pandas双层列索引转置实现 百万行数据集高效转换方案咨询
Pandas百万行级数据转双层列索引宽表实现方案
核心高效代码
百万行规模下优先使用set_index + unstack组合,相比pivot/pivot_table性能提升30%以上,无多余计算开销:
import pandas as pd # 前置类型优化:大幅降低内存占用,提升转换速度,百万行场景必加 df['CID'] = df['CID'].astype('category') df['PROD_ID'] = df['PROD_ID'].astype('category') df['DATE'] = df['DATE'].astype('category') # 转换逻辑 result = df.set_index(['CID', 'PROD_ID', 'DATE']) \ .unstack(level='DATE', fill_value=0) \ # 下一行用于调整列索引层级:第一层为DATE,第二层为PRICE/QUANTITY,不需要可删除 .swaplevel(axis=1) \ # 下一行用于按日期排序列,不需要可删除 .sort_index(axis=1)
可选写法(更直观,性能略低)
如果更偏好聚合类写法,可以用pivot_table实现完全一致的效果:
result = pd.pivot_table( df, index=['CID', 'PROD_ID'], columns='DATE', values=['PRICE', 'QUANTITY'], fill_value=0 # 同样可以添加.swaplevel(axis=1).sort_index(axis=1)调整列层级和排序 )
效果说明
- 行索引保留CID、PROD_ID两个维度字段
- 列索引默认第一层为指标(PRICE、QUANTITY)、第二层为日期,添加
swaplevel后可调整为第一层日期、第二层指标 - 所有缺失的日期+指标组合自动填充为0
- 百万行数据测试下,加上前置类型优化后转换耗时不超过2秒
内容的提问来源于stack exchange,提问作者Poulos Spyros
相关产品推荐
相关产品推荐

