如何将DataFrame多列堆叠为一列并填充列标题
解决方法:使用
melt实现宽表转长表 你的需求是将多颜色列转换为单个Color列并保留对应日期,这是典型的宽表转长表场景,pandas.melt()是最直接高效的实现方式,比stack或concat更简洁。
步骤示例
- 先构造原始DataFrame(如果已有可跳过):
import pandas as pd data = { 'Date': ['1/1/14', '1/2/14', '1/3/14', '1/4/14'], 'Blue': [55, 36, 23, 47], 'Red': [34, 35, 46, 34], 'Green': [34, 23, 43, 55] } df = pd.DataFrame(data)
- 用
melt重塑数据:
# 核心转换:保留Date,将颜色列转为Color行 result = df.melt( id_vars='Date', # 指定保留的关联列 value_vars=['Blue', 'Red', 'Green'], # 指定要转换的目标列 var_name='Color' # 设置转换后的列名 ) # 移除不需要的数值列(匹配你要的结果结构) result = result.drop(columns='value') # 按Color排序,和目标结果顺序一致(可选) result = result.sort_values('Color').reset_index(drop=True)
最终结果
运行后得到的DataFrame结构完全符合需求:
Date Color 0 1/1/14 Blue 1 1/2/14 Blue 2 1/3/14 Blue 3 1/4/14 Blue 4 1/1/14 Green 5 1/2/14 Green 6 1/3/14 Green 7 1/4/14 Green 8 1/1/14 Red 9 1/2/14 Red 10 1/3/14 Red 11 1/4/14 Red
关于其他方法的说明
stack:也能实现,但需要先将Date设为索引,操作步骤更繁琐,适合处理层级索引场景,没必要用在这个简单需求上。concat:需要手动为每个颜色构造单独的DataFrame再合并,代码冗余,效率低,不推荐。
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

