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

如何将Pandas MultiIndex列名拼接为指定格式?

Pandas MultiIndex列名拼接方案

问题场景

现有Pandas DataFrame的列是MultiIndex结构:

df_incumbent_Q.columns

输出结构:

MultiIndex([('Cust Linehaul', '2022Q2'),
            ('Cust Linehaul', '2022Q3'),
            ('Cust Linehaul', '2022Q4'),
            (  'Load Number', '2022Q2'),
            (  'Load Number', '2022Q3'),
            (  'Load Number', '2022Q4')],
           names=[None, 'Quarter'])

需要将列名拼接为以下格式:

['Cust Linehaul_2022Q2',
 'Cust Linehaul_2022Q3',
 'Cust Linehaul_2022Q4',
 'Load Number_2022Q2',
 'Load Number_2022Q3',
 'Load Number_2022Q4']

错误尝试回顾

直接将MultiIndex元组转字符串后拼接,会出现Period格式冗余:

df_incumbent_Q.columns =[''.join(str(c)) for c in df_incumbent_Q.columns]

输出错误结果:

Index(['('Cust Linehaul', Period('2022Q2', 'Q-DEC'))',
   '('Cust Linehaul', Period('2022Q3', 'Q-DEC'))',
   '('Cust Linehaul', Period('2022Q4', 'Q-DEC'))',
   '('Load Number', Period('2022Q2', 'Q-DEC'))',
   '('Load Number', Period('2022Q3', 'Q-DEC'))',
   '('Load Number', Period('2022Q4', 'Q-DEC'))'],
  dtype='object')

后续用简单replace无法彻底清理冗余内容。

解决方案

方法一:直接遍历元组拼接(优先推荐)

无需将元组转成完整字符串再处理,直接提取元组内的元素,用下划线连接:

df_incumbent_Q.columns = ['_'.join(map(str, col)) for col in df_incumbent_Q.columns]

原理:每个col是MultiIndex中的元组,map(str, col)会把元组内的每个元素(包括Period类型的季度值)转成对应字符串,再通过_拼接,直接得到目标格式。

也可以用f-string简化写法:

df_incumbent_Q.columns = [f"{col[0]}_{col[1]}" for col in df_incumbent_Q.columns]

f-string会自动将Period对象转换为对应的季度字符串(如Period('2022Q2', 'Q-DEC')转成'2022Q2')。

方法二:正则替换修复错误列名

如果已经生成了带冗余内容的列名,用正则表达式批量清理:

df_incumbent_Q.columns = df_incumbent_Q.columns.str.replace(r"\(|\)|Period|'Q-DEC'", "", regex=True).str.replace(", ", "_")

步骤说明:

  1. 先移除括号、Period关键字、'Q-DEC'这些冗余内容
  2. 再将元组内的逗号空格替换为下划线,得到目标列名格式

内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:35:18