如何将含日期时间索引的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)
代码说明
- 拆分索引:从DatetimeIndex中分离出纯日期和仅保留小时分钟的时间字符串,作为后续重组的依据。
- 重组数据结构:通过多层索引+
unstack操作,把同一日期下不同时间的价格数据横向展开。 - 列名格式化:将原价格列名和时间后缀拼接,得到目标格式的列名。
- 索引名称调整:把结果的索引名称统一为
DATE,匹配目标格式要求。
运行后即可得到符合需求的DataFrame。
内容的提问来源于stack exchange,提问作者syd
相关产品推荐
相关产品推荐

