Python Pandas:按15分钟时段横向重组能源消耗数据
处理能耗数据长转宽:Pivot vs Stack/Unstack
针对你要把单条记录(日期、15分钟时段、公司、能耗)重组为「日期+公司为分组维度,时段作为列、能耗横向排列」的需求,下面直接对比两种方法的适用场景:
1. 优先选 pivot:简洁直观,适合新手
pivot 是Pandas专门为这种常规长表转宽表设计的方法,参数直接对应你的需求,一步就能完成转换,代码可读性极高。
假设你的原始DataFrame结构如下(列名示例):
| date | time_slot | company | energy_consumption |
|---|---|---|---|
| 2022-07-01 | 00:00-00:15 | A | 1.2 |
| 2022-07-01 | 00:15-00:30 | A | 1.5 |
| 2022-07-01 | 00:00-00:15 | B | 2.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
相关产品推荐
相关产品推荐

