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

如何将含日期时间索引的Pandas DataFrame重组为日期分组、时间为列后缀的格式

问题:Pandas DataFrame按日期分组并将时间作为列后缀转换格式

原始生成代码

import pandas as pd

index = ['2023-06-01 09:55:00', '2023-06-02 09:55:00', '2023-06-01 10:00:00', '2023-06-02 10:00:00']
price_1 = [16.00, 16.45, 16.00, 16.79]
price_2 = [16.91, 17.44, 16.95, 18.10]
data = {
    'price_1': price_1,
    'price_2': price_2
}
df = pd.DataFrame(data, index=pd.to_datetime(index))

print(df)

原始DataFrame结构

price_1  price_2
DATE                                     
2023-06-01 09:55:00  16.000000  16.917621
2023-06-02 09:55:00  16.454790  17.440297
2023-06-01 10:00:00  16.001549  16.955189
2023-06-02 10:00:00  16.792508  18.100698

目标格式需求

需要将上述DataFrame转换为按日期分组,把原索引的时间部分作为价格列的后缀:

price_1_09:55  price_2_09:55 price_1_10:00 price_2_10:00
DATE                                     
2023-06-01           16.000000      16.917621     16.001549     16.955189
2023-06-02           16.454790      17.440297     16.792508     18.100698

解决方案

可以通过拆分索引的日期和时间维度,再利用unstack重组数据来实现,具体代码如下:

# 从索引中提取纯日期部分和格式化后的小时:分钟时间
df['date'] = df.index.date
df['time'] = df.index.strftime('%H:%M')

# 以date和time为多层索引,将time层级展开为列
result = df.set_index(['date', 'time']).unstack(level='time')

# 拼接列名,将原价格列与时间后缀组合
result.columns = [f'{col[0]}_{col[1]}' for col in result.columns]

# 调整索引名称为目标格式的DATE
result.index.name = 'DATE'

print(result)

代码说明

  1. 拆分索引:从DatetimeIndex中分离出纯日期和仅保留小时分钟的时间字符串,作为后续重组的依据。
  2. 重组数据结构:通过多层索引+unstack操作,把同一日期下不同时间的价格数据横向展开。
  3. 列名格式化:将原价格列名和时间后缀拼接,得到目标格式的列名。
  4. 索引名称调整:把结果的索引名称统一为DATE,匹配目标格式要求。

运行后即可得到符合需求的DataFrame。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:37:31