如何将多级索引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
相关产品推荐
相关产品推荐

