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

如何将多级索引DataFrame的分组值填充至每一行?

问题描述

我通过.pivot()和.swaplevel()方法创建了一个多级索引DataFrame,代码如下:

df4 = test.pivot(index=['Company', 'EmployeeName', 'ID', 'Position', 'SortCenterOperationType', 'WeightGroup', 'Tarif', 'Hub', 'Cluster'],
             columns='Date', values=['OperationQty', 'faults', 'table_hours', 'hours_for_payment', 'Payment']
            ).swaplevel(axis=1).sort_index(1).reindex(level = 1, columns = ['table_hours', 'hours_for_payment', 'faults', 'OperationQty' , 'Payment'])

我希望将该DataFrame的每个分组行转换为单独的行,同时保留右侧的多级索引表头。我知道可以通过如下方式构建多级索引表头:

([[''], ['Company']],
[[''], ['Name']],
[[''], ['ID']].....)

但不清楚如何将分组值复制到每一行的单元格中,请问有什么解决建议?

解决建议
  • 展开分组索引为普通列
    首先将行的多级索引转换为普通列,此时分组字段的数值会自动填充到每一行对应的单元格中:

    df_expanded = df4.reset_index()
    
  • 构建目标多级表头
    按照需求创建两级表头结构,第一级对应空字符串(分组列)和日期(数值列),第二级对应具体列名:

    import pandas as pd
    
    # 拆分分组列和数值列
    group_cols = df_expanded.columns[:9].tolist()
    value_cols = df_expanded.columns[9:].tolist()
    
    # 生成表头的两级数组
    header_top = [''] * len(group_cols) + [col[0] for col in value_cols]
    header_bottom = group_cols + [col[1] for col in value_cols]
    
    # 创建多级索引表头并赋值
    new_multi_header = pd.MultiIndex.from_arrays([header_top, header_bottom])
    df_expanded.columns = new_multi_header
    
  • 调整列顺序(可选)
    如果需要和原需求的列顺序完全匹配,可使用reindex方法重新排列列,逻辑与你原代码一致。

经过上述步骤,就能得到分组值逐行填充、同时保留右侧多级索引表头的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:17:07