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

如何在Pandas中将拼接列名拆分为独立列?

解决Pandas中拆分拼接列名并转换长表的问题

我来帮你搞定这个列拆分+宽转长的需求!这种把用|拼接的复合列名拆分成独立字段的场景在数据分析里很常见,咱们用Pandas几步就能实现目标结构:

步骤1:模拟/读取原始数据

先构造和你数据结构一致的测试样例(如果是读取本地文件,用pd.read_csv()等方法即可):

import pandas as pd

# 模拟你的原始宽表数据
raw_data = {
    "Date": ["2018-11"],
    "Product1|CBA|MKD": [12],
    "Product1|CPA|MKD": [23],
    "Product1|CBA|IHR": [0],
    "Product2|CBA|IHR": [2]
}
df = pd.DataFrame(raw_data)

步骤2:将宽表转为长表

用melt()方法把所有复合列名的列转成"列名-数值"的键值对,保留Date作为分组标识:

# 宽转长,生成包含复合列名和对应数量的临时表
melted_df = df.melt(
    id_vars="Date",          # 保留不参与转换的列
    var_name="Combined",     # 复合列名的新列名
    value_name="Quantity"    # 数量值的新列名
)

这一步之后,melted_df的结构会变成:

DateCombinedQuantity
2018-11Product1CBA
2018-11Product1CPA
.........

步骤3:拆分复合列名为独立字段

对Combined列用str.split()拆分,并指定expand=True直接生成多列,然后给新列命名:

# 拆分复合列名,生成Product/Partner/Market三列
split_cols = melted_df["Combined"].str.split("|", expand=True)
split_cols.columns = ["Product", "Partner", "Market"]

# 把拆分后的列和原长表合并
final_df = pd.concat([melted_df[["Date", "Quantity"]], split_cols], axis=1)

步骤4:调整列顺序到目标结构

最后把列调整成你需要的顺序即可:

# 重新排列列
final_df = final_df[["Date", "Product", "Partner", "Market", "Quantity"]]

最终输出的final_df就是你想要的结构:

DateProductPartnerMarketQuantity
2018-11Product1CBAMKD12
2018-11Product1CPAMKD23
2018-11Product1CBAIHR0
2018-11Product2CBAIHR2

补充说明

  • 如果你的原始数据中Date是行索引,可以先通过df.reset_index()把索引转成列,再执行上述步骤。
  • 这个方法完全适配"大量唯一列组合"的场景,melt()会自动遍历所有复合列名,不会遗漏任何组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:44:58