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

Python Pandas按变量转置(unstack)多地点温度时序数据

解决Pandas数据重塑:将长格式温度数据转为宽格式

嘿,刚入门Python和Pandas的时候,确实容易被这类术语绕晕,别担心,你想要的操作就是把长格式数据转换成宽格式,用Pandas里的pivot或者你提到的unstack都能轻松实现,我给你一步步说明:

先明确你的需求

你原数据的结构是每一行对应一个「地点+时间」的温度记录:

a                   b      c
0  0001  2016-02-01 00:00  19.93
1  0001  2016-02-01 00:30  19.50
2  0001  2016-02-01 01:00  19.25
3  0002  2016-02-01 00:00  23.37
4  0002  2016-02-01 00:30  22.93
5  0002  2016-02-01 01:00  22.56

想要转成时间为行索引,地点为列,温度为对应值的宽格式,刚好是Pandas擅长的操作!

方法1:用pivot(最直接)

pivot是专门做这种行列转换的函数,直接指定三个参数:

  • index:要作为结果行索引的列(你的时间列b)
  • columns:要作为结果列名的列(你的地点列a)
  • values:要填充到单元格里的值(你的温度列c)

代码示例:

import pandas as pd

# 假设你的原数据已经是DataFrame,命名为df
df_pivoted = df.pivot(index='b', columns='a', values='c')

运行后得到的结果就是你想要的格式:

a                0001   0002
b                           
2016-02-01 00:00  19.93  23.37
2016-02-01 00:30  19.50  22.93
2016-02-01 01:00  19.25  22.56

方法2:用set_index + unstack(对应你提到的unstack)

如果你想用unstack,可以先把时间和地点设为多层索引,再把地点这一层“展开”成列:

# 先设置多层索引(时间b + 地点a),然后取出温度列c,再unstack地点a
df_unstacked = df.set_index(['b', 'a'])['c'].unstack('a')

这个方法得到的结果和pivot完全一样,只是操作路径不同。

额外提示:处理重复数据

如果你的原数据里存在同一个地点+时间对应多条温度记录(比如同一时间同一个地点测了好几次温度),直接用pivot会报错,这时候可以用pivot_table,指定聚合函数来合并重复值,比如取平均值:

df_pivot_table = df.pivot_table(index='b', columns='a', values='c', aggfunc='mean')

你也可以根据需求换成sum、max等聚合函数。

希望这个解决方案能帮到你,刚接触Pandas多试几次就能熟悉这些操作啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:53