如何基于已排序的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
相关产品推荐
相关产品推荐

