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

将带时间索引的多列Pandas DataFrame重塑为两列结构

高效转换带时间索引的多列Pandas DataFrame

针对你需要将带时间索引的多列DataFrame转换为原列名作为新索引、时间+数值为两列的需求,推荐使用Pandas内置的stack()方法,这是处理大数据量重复转换的高效方案。

示例代码

首先构造符合你示例的测试数据:

import pandas as pd

# 构造原始DataFrame(索引为时间列)
df = pd.DataFrame(
    {'p1': [1, 2, 3], 'p2': [4, 5, 6], 'p3': [7, 8, 9]},
    index=[1, 6, 11]
)
df.index.name = 'time'  # 为索引命名,便于后续处理

执行转换操作:

# 核心转换步骤
result = df.stack().reset_index()
# 重命名列并设置新索引
result.columns = ['time', 'new_index', 'vals']
result = result.set_index('new_index')

转换后得到的DataFrame与你的需求完全一致:

time  vals
new_index             
p1             1     1
p1             6     2
p1            11     3
p2             1     4
p2             6     5
p2            11     6
p3             1     7
p3             6     8
p3            11     9

高效性说明

  • stack()是Pandas底层优化的向量操作,基于numpy数组实现,避免了Python循环的开销,处理大数据量时性能远优于自定义逻辑。
  • 提前为原始DataFrame的索引命名(df.index.name = 'time')可以减少后续列重命名的额外操作,进一步提升效率。
  • 如果需要重复执行转换,确保原始DataFrame的索引和列数据类型统一(如数值型),避免类型转换带来的性能损耗。

内容的提问来源于stack exchange,提问作者András Jakab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:14:56