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

Python Pandas:按15分钟时段横向重组能源消耗数据

处理能耗数据长转宽:Pivot vs Stack/Unstack

针对你要把单条记录(日期、15分钟时段、公司、能耗)重组为「日期+公司为分组维度,时段作为列、能耗横向排列」的需求,下面直接对比两种方法的适用场景:

1. 优先选 pivot:简洁直观,适合新手

pivot 是Pandas专门为这种常规长表转宽表设计的方法,参数直接对应你的需求,一步就能完成转换,代码可读性极高。

假设你的原始DataFrame结构如下(列名示例):

datetime_slotcompanyenergy_consumption
2022-07-0100:00-00:15A1.2
2022-07-0100:15-00:30A1.5
2022-07-0100:00-00:15B2.1

用pivot的代码示例:

import pandas as pd

# 读取CSV
df = pd.read_csv('your_energy_data.csv')

# 直接转换:index是分组维度,columns是要转成列的字段,values是填充值
wide_df = df.pivot(
    index=['date', 'company'],  # 按日期+公司分组
    columns='time_slot',        # 把15分钟时段转成列
    values='energy_consumption' # 填充到列中的能耗值
)

# 可选:把索引转回普通列,方便后续处理
wide_df = wide_df.reset_index()

转换后的结果就是你想要的结构:日期和公司作为普通列,各个15分钟时段是单独的列,对应位置填能耗值。

2. stack/unstack:灵活但步骤稍多

stack(把列转成行)和unstack(把行转成列)是处理多层索引的通用工具,适合更复杂的结构转换,但需要先设置多层索引,步骤比pivot多一点。

用unstack实现同样需求的代码示例:

# 先设置多层索引:日期、公司、时段
df.set_index(['date', 'company', 'time_slot'], inplace=True)

# 把时段从行索引转成列
wide_df = df.unstack(level='time_slot')

# 可选:扁平化多层列索引(默认会保留原values列名作为上层索引)
wide_df.columns = wide_df.columns.droplevel(0)
wide_df = wide_df.reset_index()

总结

  • 如果你只是处理当前这种固定的长转宽需求,直接用pivot就够了,代码简单易懂,新手能快速上手,不需要纠结多层索引的操作。
  • stack/unstack更适合处理多层索引的复杂转换场景(比如同时转多个字段、嵌套结构等),但对新手来说理解成本稍高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:18:17