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
相关产品推荐
相关产品推荐

