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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:21:01