如何将时间戳行的时间部分转列,生成每日时段能耗宽表
能耗30分钟间隔数据转宽表解决方案
下面给出三种常用工具的实现方式:
Python(Pandas)实现
适合数据量较大、需要自动化处理的场景
import pandas as pd # 1. 读取原始数据,自动解析时间列 df = pd.read_csv("你的数据文件路径.csv", parse_dates=["Timestamp"]) # 2. 拆分出日期和时段列 df["date"] = df["Timestamp"].dt.date # 时段格式统一为HH:MM df["time_slot"] = df["Timestamp"].dt.strftime("%H:%M") # 3. 透视生成宽表 wide_df = df.pivot( index="date", columns="time_slot", values="Energy_KWh" ).reset_index() # 可选:补全全天48个时段(避免某时段无数据导致列缺失) full_time_slots = [f"{hour:02d}:{minute:02d}" for hour in range(24) for minute in (0, 30)] wide_df = wide_df.reindex(columns=["date"] + full_time_slots) # 4. 导出结果 wide_df.to_csv("宽表结果.csv", index=False)
注:如果需要填充缺失时段的空值,可以加一行wide_df = wide_df.fillna(0),把空值替换为0或者其他你需要的默认值
SQL实现
适合数据存储在关系型数据库的场景,以MySQL为例:
SELECT DATE(`Timestamp`) AS `date`, SUM(CASE WHEN TIME(`Timestamp`) = '00:00:00' THEN Energy_KWh END) AS `00:00`, SUM(CASE WHEN TIME(`Timestamp`) = '00:30:00' THEN Energy_KWh END) AS `00:30`, -- 按上述规则依次补充剩下的46个时段,直到23:30为止 SUM(CASE WHEN TIME(`Timestamp`) = '23:30:00' THEN Energy_KWh END) AS `23:30` FROM 你的能耗表名 GROUP BY DATE(`Timestamp`) ORDER BY `date` ASC;
注:如果你用的是支持PIVOT语法的数据库(PostgreSQL、BigQuery、SQL Server等),可以直接调用PIVOT方法,不需要手写48行CASE WHEN语句
Excel实现
适合小数据量、快速处理的场景
- 新增两个辅助列:
- 日期列:公式为
=INT(A2)(A列为Timestamp所在列,设置单元格格式为日期格式) - 时段列:公式为
=TEXT(A2,"hh:mm")
- 日期列:公式为
- 选中全部数据,插入「数据透视表」
- 透视表配置:行区域放「日期」字段,列区域放「时段」字段,值区域放「Energy_KWh」字段,值汇总方式选择「求和」
- 可选补全缺失时段:右键列标签→字段设置→布局和打印→勾选「显示无数据的项目」
内容的提问来源于stack exchange,提问作者prp
相关产品推荐
相关产品推荐

