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

如何用Python实现数据集的半列逆透视转换?

Python实现宽表转长表(列转行)解决方案

你需要的操作叫做宽表转长表(列转行),不是透视(透视是长表转宽的操作)。用Python的pandas库可以轻松实现,下面是具体思路和代码:

核心思路

使用pandas的melt函数,它专门用于将指定的多列“拆解”成两列(列名+对应值),同时保留其他列的内容并自动重复匹配。

步骤与代码

  1. 先安装pandas(如果还没装):
pip install pandas
  1. 完整代码示例(包含模拟数据和转换逻辑):
import pandas as pd

# 模拟你的原始数据集
raw_data = {
    'Name': ['张三', '李四'],
    'Address': ['北京市朝阳区', '上海市浦东新区'],
    'DOB': ['1990-01-01', '1991-02-02'],
    'Ind1': [1, 0],
    'Ind2': [0, 1],
    'Ind3': [1, 1]
}

# 转为pandas的DataFrame格式(表格结构)
df = pd.DataFrame(raw_data)

# 执行列转行操作
# id_vars:指定需要保留、重复显示的列
# value_vars:指定需要转换的目标列(Ind1/Ind2/Ind3)
# var_name:转换后存储原列名的新列名
# value_name:转换后存储原列值的新列名
transformed_df = df.melt(
    id_vars=['Name', 'Address', 'DOB'],
    value_vars=['Ind1', 'Ind2', 'Ind3'],
    var_name='ColName',
    value_name='Value'
)

# 查看转换结果
print(transformed_df)

输出结果示例

Name    Address         DOB ColName  Value
0  张三  北京市朝阳区  1990-01-01    Ind1      1
1  李四  上海市浦东新区  1991-02-02    Ind1      0
2  张三  北京市朝阳区  1990-01-01    Ind2      0
3  李四  上海市浦东新区  1991-02-02    Ind2      1
4  张三  北京市朝阳区  1990-01-01    Ind3      1
5  李四  上海市浦东新区  1991-02-02    Ind3      1

适配你的实际数据

  • 如果你的数据是从CSV/Excel文件读取的,替换模拟数据部分:
    # 读取CSV
    df = pd.read_csv('你的数据文件路径.csv')
    # 读取Excel
    df = pd.read_excel('你的数据文件路径.xlsx')
    
  • 如果需要转换的列更多(比如Ind4/Ind5),只需在value_vars列表里添加对应的列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:08:41