DataFrame长表转宽表:将指定列值转为新列实现数据重构
数据转换实现方案
你需要的是典型的长表转宽表操作,使用Pandas的pivot方法即可快速实现,完整操作步骤如下:
1. 前置准备(构造测试数据)
如果是你自己的真实数据,可跳过这一步,直接读取数据到DataFrame即可:
import pandas as pd # 构造和你示例一致的原始DataFrame df = pd.DataFrame({ 'Time': [0, 1, 0, 1], 'Image': ['A1', 'A1', 'B1', 'B1'], 'Mean': [1, 2, 3, 4] })
2. 核心转换代码
# 执行长表转宽表 res = df.pivot( index='Time', # 指定保持为行的列 columns='Image', # 指定要展开为新列的列 values='Mean' # 指定填充到新列的数值来源 ).reset_index() # 将Time从索引恢复为普通列 # 移除自动生成的多余列索引名,匹配预期输出格式 res = res.rename_axis(columns=None)
3. 输出结果验证
转换后的res内容如下,完全符合你的预期:
| Time | A1 | B1 |
|---|---|---|
| 0 | 1 | 3 |
| 1 | 2 | 4 |
可选方案(存在重复值场景)
如果你的原始数据中存在同一个Time和Image组合对应多个Mean值的情况,可以使用pivot_table方法指定聚合规则,比如对重复值求均值:
res = df.pivot_table( index='Time', columns='Image', values='Mean', aggfunc='mean' # 可根据需求替换为sum、max等聚合函数 ).reset_index().rename_axis(columns=None)
内容的提问来源于stack exchange,提问作者Shira
相关产品推荐
相关产品推荐

