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

如何将多个DataFrame合并为一个:以time为索引、id为列名

解决方案:将多个固定时间的DataFrame转换为宽格式表格

我明白你的需求啦——你手上有一批结构相似的DataFrame,每个里面的time值都是固定的,而且所有DF的id列包含完全相同的元素,现在要把它们整合成一个新的宽表:每个原DF对应新表的一行,用那个唯一的time当行索引,id里的元素作为新表的列名,对应位置填原DF里的数值。

咱们先从示例数据入手,这样更直观:

import pandas as pd

# 模拟你手上的DataFrame列表
df_list = [
    pd.DataFrame({'time': ['2023-01-01']*3, 'id': ['A', 'B', 'C'], 'value': [10, 20, 30]}),
    pd.DataFrame({'time': ['2023-01-02']*3, 'id': ['A', 'B', 'C'], 'value': [15, 25, 35]}),
    pd.DataFrame({'time': ['2023-01-03']*3, 'id': ['A', 'B', 'C'], 'value': [12, 22, 32]})
]

接下来是核心的处理步骤,思路很简单:把每个小DF先转成单行的宽格式,再把所有单行DF拼起来就行:

# 处理每个DataFrame,转成以time为索引的单行宽表
processed_dfs = []
for df in df_list:
    # 取出当前DF唯一的time值
    current_time = df['time'].iloc[0]
    # 将id设为索引,提取数值列后转置成单行,再把time设为行索引
    wide_single_row = df.set_index('id')['value'].to_frame().T
    wide_single_row.index = [current_time]
    processed_dfs.append(wide_single_row)

# 合并所有处理后的单行表
final_df = pd.concat(processed_dfs)

运行之后你会得到这样的结果:

A   B   C
2023-01-01  10  20  30
2023-01-02  15  25  35
2023-01-03  12  22  32

如果想让代码更简洁,用列表推导式一步到位:

final_df = pd.concat(
    [df.set_index('id')['value'].to_frame().T.set_index([df['time'].iloc[0]]) 
     for df in df_list]
)

⚠️ 注意:如果你的原DataFrame里存储数值的列不是叫value,记得把代码里的['value']替换成你实际的列名(比如['score']、['metric']之类的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:47:33