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

基于Pandas从时间序列DataFrame提取唯一日期并生成目标CSV

时间序列数据宽表转换完整解决方案

核心思路

将按分钟记录的长格式数据,转换为以日期为行、每日1440分钟为列的宽格式表,最终导出CSV文件。

完整代码实现

import pandas as pd

# 标准化时间列格式(兼容UTC时区的ISO时间戳)
df['Time'] = pd.to_datetime(df['Time'], utc=True)

# 生成行标识与列标识
df['date'] = df['Time'].dt.date  # 提取日期作为行索引
df['minute_of_day'] = df['Time'].dt.hour * 60 + df['Time'].dt.minute + 1  # 计算当日分钟序号(1-1440)

# 转换为宽表(根据数据情况选择方法)
# 无重复分钟记录时用pivot
pivot_df = df.pivot(index='date', columns='minute_of_day', values='Volume every minute')
# 存在重复分钟记录时用pivot_table,指定聚合逻辑(例:求和)
# pivot_df = df.pivot_table(index='date', columns='minute_of_day', values='Volume every minute', aggfunc='sum')

# 重命名列为min1至min1440格式
pivot_df.columns = [f'min{col}' for col in pivot_df.columns]

# 填充缺失分钟数据(按需选择填充0或保留空值)
pivot_df = pivot_df.fillna(0)

# 导出至目标CSV文件
pivot_df.to_csv('daily_volume_minutes.csv')

关键步骤说明

  • 时间格式处理:用pd.to_datetime将ISO时间戳转为datetime对象,utc=True适配末尾的Z时区标记,确保时间解析准确。
  • 标识生成:
    • date列提取纯日期值,作为宽表的唯一行标识;
    • minute_of_day通过小时*60+分钟+1计算得到1-1440的序号,对应目标列的min1至min1440。
  • 宽表转换:
    • 无重复分钟数据时,pivot可直接完成长表转宽表;
    • 若同一分钟有多条记录,用pivot_table指定聚合规则(如求和、取均值)避免冲突。
  • 列名适配:通过列表推导式批量将数字序号改为minX格式,匹配需求。
  • 缺失值处理:对某天缺失的分钟记录,用fillna填充0或保留空值,根据业务场景调整。
  • 文件导出:to_csv直接生成符合要求的宽表CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:43:19