如何将列值转为列名?寻求Pandas内置函数实现高效转换
用Pandas内置函数高效实现宽表转换
嘿,你的这个需求完全可以用Pandas的内置pivot函数一步搞定,比手动循环构建字典的方式性能高太多,而且代码简洁到离谱!
核心解决方案
因为你的数据里timestamp和id_的组合是唯一的(没有重复的时间-ID对),直接用pivot就能完美实现你要的格式:
import pandas as pd # 假设你的原始数据已经读入为DataFrame df res = df.pivot(index='timestamp', columns='id_', values='value')
为什么这个方法更好?
- 性能碾压:Pandas的内置函数是基于C语言实现的,比你手动写Python循环快几个数量级,尤其是当数据量很大的时候,差距会非常明显。
- 代码简洁:一行代码就完成了分组、提取值、构建新DataFrame的全部操作,可读性和维护性都强很多。
转换后的结果
运行上面的代码后,得到的res就是你想要的格式:
a b timestamp 2020-05-01 0 10 2020-05-02 1 11 2020-05-03 2 12 2020-05-04 3 13 2020-05-05 4 14 2020-05-06 5 15 2020-05-07 6 16 2020-05-08 7 17 2020-05-09 8 18 2020-05-10 9 19
特殊情况处理(可选)
如果你的数据里存在重复的timestamp+id_组合(比如同一个ID在同一天有多个value),可以用pivot_table并指定聚合函数来处理:
res = df.pivot_table(index='timestamp', columns='id_', values='value', aggfunc='mean')
这里用mean取平均值,你也可以根据需求换成sum、max等其他聚合函数。
内容的提问来源于stack exchange,提问作者ComplicatedPhenomenon
相关产品推荐
相关产品推荐

