将带Datetime索引的Pandas DataFrame高效重排为多列
高效重排Datetime索引的Pandas DataFrame方案
针对你的12万条15分钟间隔数据,绝对不要用apply——这类逐行/逐组的循环操作在大规模数据上效率极低。推荐用Pandas内置的矢量化重塑方法,处理速度能控制在几秒内,甚至更快。
核心思路
利用Datetime索引的dt属性拆分出日期(作为行索引)和时段(作为列),然后通过pivot或unstack完成结构转换,这两个方法都是底层优化过的矢量化操作,远快于apply。
代码实现
假设你的原始DataFrame为df,唯一列名为measurement:
方法1:使用pivot(直观易读)
# 从Datetime索引提取日期和时段列 df['date'] = df.index.date df['time_slot'] = df.index.time # 重排结构:日期为索引,时段为列 pivoted_df = df.pivot(index='date', columns='time_slot', values='measurement')
方法2:使用groupby + unstack(性能略优)
不需要额外添加列,直接基于索引分组后展开:
# 按日期+时段分组,取对应测量值后展开为列 pivoted_df = df.groupby([df.index.date, df.index.time])['measurement'].first().unstack(level=1)
补充说明
- 由于是15分钟间隔,一天会生成96个时段列(24*60/15),符合你的神经网络训练需求。
- 如果存在缺失的时段数据(比如某日期少了几个15分钟点),可以用
fillna填充:pivoted_df = pivoted_df.fillna(0) # 按业务需求选择填充值,比如0或前向填充 - 这两种方法处理12万条数据的耗时通常在1-2秒左右,完全满足你的要求。
内容的提问来源于stack exchange,提问作者gnitsche
相关产品推荐
相关产品推荐

