如何用Python实现数据集的半列逆透视转换?
Python实现宽表转长表(列转行)解决方案
你需要的操作叫做宽表转长表(列转行),不是透视(透视是长表转宽的操作)。用Python的pandas库可以轻松实现,下面是具体思路和代码:
核心思路
使用pandas的melt函数,它专门用于将指定的多列“拆解”成两列(列名+对应值),同时保留其他列的内容并自动重复匹配。
步骤与代码
- 先安装pandas(如果还没装):
pip install pandas
- 完整代码示例(包含模拟数据和转换逻辑):
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
相关产品推荐
相关产品推荐

