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

规整时间序列数据:Dataframe时间格式转换技术咨询

解决方法:宽表转长表并合并时间序列

这是个很常见的宽表转长表+时间合并的需求,用pandas就能轻松搞定,我给你一步步拆解:

1. 先明确原始数据结构

假设你的原始DataFrame长这样(行是小时0-23,列是日期,单元格是对应记录值):

import pandas as pd
import numpy as np

# 构造示例数据
dates = pd.date_range('2024-01-01', periods=3).strftime('%Y-%m-%d')
hours = range(24)
df = pd.DataFrame(np.random.randn(24, 3), index=hours, columns=dates)
df.index.name = 'hour'

2. 把小时索引转为普通列

首先需要把行索引的「小时」转成单独的列,方便后续合并:

df_reset = df.reset_index()

3. 将宽表转成长表(核心步骤)

用melt()函数把多列的日期合并成一个「日期」列,对应的记录值统一放到「record」列:

df_melted = df_reset.melt(
    id_vars='hour',  # 保留不变的列:小时
    var_name='date', # 原来的日期列名会变成这个列的取值
    value_name='record' # 原来的单元格值会放到这个列里
)

4. 合并日期与小时为时间序列

把「date」和「hour」列合并成标准的datetime类型时间戳,这里注意给小时补零保证格式正确:

# 给小时补零(比如5→05),避免时间解析出错
df_melted['hour_str'] = df_melted['hour'].apply(lambda x: f"{x:02d}")
# 合并成时间戳
df_melted['timestamp'] = pd.to_datetime(df_melted['date'] + ' ' + df_melted['hour_str'])

5. 整理最终结果

最后可以调整列顺序、删除多余列,按时间排序:

final_df = df_melted[['timestamp', 'record']].sort_values('timestamp').reset_index(drop=True)

这样你就得到了想要的结构:一列是完整的时间序列,另一列是对应记录值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:48:41