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

Pandas多层列DataFrame如何将同名顶级列的子列合并分组

Pandas多层列索引同名顶级列子列归集方法

问题原因

你之前使用的df.groupby(df.columns, axis=1)是按照完整的列索引元组(同时匹配顶级列和子列)进行分组,和你只按顶级列归集子列的需求不匹配,因此无法达到预期效果。

实现方案

方案1:保持原有子列相对顺序(适配示例场景,推荐)

该方案不会打乱同个顶级列下子列的原有出现顺序,比如你的场景里原有Num子列早于ProdID出现,归集后依然保持该顺序:

# 提取不重复的顶级列名,保持原有的出现顺序
unique_top_cols = list(dict.fromkeys(df.columns.get_level_values(0)))
new_col_order = []
# 遍历每个顶级列,收集其对应的所有子列
for top_col in unique_top_cols:
    matched_sub_cols = df.columns[df.columns.get_level_values(0) == top_col]
    new_col_order.extend(matched_sub_cols)
# 按新的列顺序重排DataFrame
df = df[new_col_order]

方案2:按索引字典序快速排序

如果不需要严格保持子列原有顺序,只需要同顶级列的子列相邻,可以直接用sort_index快速实现:

# axis=1指定对列操作,level=0指定按顶级列索引排序
df = df.sort_index(axis=1, level=0)

方案3:自定义子列排序规则

如果需要固定同顶级列下的子列顺序(比如强制Num永远在ProdID前面),可以自定义排序优先级:

# 定义子列排序优先级,数值越小排名越靠前
sub_priority = {'Num': 0, 'ProdID': 1}
df = df.sort_index(
    axis=1,
    level=0,
    # 按自定义优先级对子列排序,未匹配的子列默认排在最后
    key=lambda sub_col: sub_col.map(lambda x: sub_priority.get(x, 999))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:27:03