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

如何基于已排序的pandas dataframe生成指定格式的交叉汇总表

问题原因

你出现重复行、空值的核心原因是set_index操作使用了append=True参数,会将原始数据的行索引也加入多级行索引,unstack后每一行原始数据会单独保留为结果的一行,自然每行只有对应segment的数据,其余segment列均为空值。同时你提供的代码中reindex操作存在语法错误,'ytd2018缺少闭合单引号。

修正代码

import pandas as pd

# 先将示例字典转换为DataFrame
df = pd.DataFrame(df4)

df_result = (df
             # 直接设置category和segment为两级行索引,不保留原始行号
             .set_index(['category', 'segment'])
             # 将segment维度转成列层级
             .unstack(level='segment')
             # 交换列层级顺序,把segment放到第一级
             .swaplevel(axis=1)
             # 按segment名称倒序排列列
             .sort_index(level=0, axis=1, ascending=False)
             # 调整指标列的顺序,修正了原代码的单引号语法错误
             .reindex(['ytd2018', 'ytd2019', 'Evolution'], level=1, axis=1)
             # 如果需要把category从索引转为普通列,取消注释下一行
             # .reset_index()
            )

核心修改点

  • 移除了多余的reset_index(drop=True)和append=True参数,避免原始行号干扰索引结构,保证同一个category的所有segment数据会合并到同一行
  • 修正了reindex操作里的单引号语法错误

内容的提问来源于stack exchange,提问作者nikita1221

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:12:00