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

如何使用Python的Pandas同时实现分列(text to Columns)和逆透视(Unpivoting)

Pandas 分列+逆透视转换实现方案

方法1:先逆透视再分列(逻辑更直观,适合新手)

操作步骤:

  • 先通过melt方法完成逆透视,保留原始表中的固定维度列
  • 对逆透视后生成的复合维度列做分列拆分
import pandas as pd

# 逆透视:id_vars替换为你需要保留的固定列名,例如["产品类别", "地区"]
df_unpivot = df3.melt(
    id_vars=["固定列1", "固定列2"],
    var_name="复合列存储字段",
    value_name="数值列"
)

# 分列:将分隔符替换为你实际使用的分隔符,例如下划线、逗号、斜杠等
# expand=True 直接返回分列后的多列数据框
df_unpivot[["拆分维度1", "拆分维度2"]] = df_unpivot["复合列存储字段"].str.split("_", expand=True)

# 可选:删除冗余列、调整列顺序
df_result = df_unpivot.drop(columns=["复合列存储字段"])[["固定列1", "固定列2", "拆分维度1", "拆分维度2", "数值列"]]

方法2:先拆分列名再逆透视(执行效率更高,适合大表)

如果你的复合维度存储在原始列名中,可以直接拆分列名生成多级索引后堆叠,一步完成转换:

# 拆分原始列名,生成多级列索引
df3.columns = df3.columns.str.split("_", expand=True)

# 设置固定列为行索引后,堆叠多级列索引完成逆透视
df_result = df3.set_index(["固定列1", "固定列2"]).stack([0, 1]).reset_index(name="数值列")

# 可选:重命名拆分后的维度列
df_result = df_result.rename(columns={
    "level_2": "拆分维度1",
    "level_3": "拆分维度2"
})

注意事项

  • 若只需拆分前N个分隔符,可在str.split中添加n=N参数,例如str.split("_", n=1, expand=True)表示仅拆分第一个下划线
  • 若拆分后存在空值,可搭配dropna方法过滤无效行
  • 无固定保留列时,id_vars参数可传入空列表[]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:57:03