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

如何基于唯一Time列合并多个pandas DataFrame

问题原因

直接调用pd.concat(dfList)默认是纵向按行拼接,逻辑是把多个DataFrame的行依次堆叠,不会自动根据公共列做行对齐,所以相同时间戳会被拆成独立行。

要实现按Time列对齐、把不同表的业务列合并到同一行,可根据表的数量选以下两种方案:

实现方案
  • 表数量少(2~3个):用merge按公共键关联
    直接指定关联键为Time列,使用外连接保证所有时间戳都被保留,示例代码:

    # 两表合并,有更多表可继续链式追加merge
    new_df = pd.merge(df1, df2, on='Time', how='outer')
    # 按需按时间升序排序,重置索引
    new_df = new_df.sort_values('Time').reset_index(drop=True)
    
  • 表数量多:转索引后横向拼接
    表数量多的时候逐表写merge效率低,可以先把每个表的Time列设为行索引,再指定concat按列横向拼接,示例代码:

    dfList = [df1, df2]
    # 预处理所有表:将Time设为行索引
    processed_df_list = [df.set_index('Time') for df in dfList]
    # axis=1 指定横向按列拼接
    new_df = pd.concat(processed_df_list, axis=1)
    # 把Time索引转回普通列,排序重置索引
    new_df = new_df.reset_index().sort_values('Time').reset_index(drop=True)
    
注意事项

如果单个DataFrame里同一个Time对应多行重复数据,合并前先对每个表做去重处理,避免合并后出现异常的重复列:

# 对单个表按Time去重,保留最后一条记录
df = df.drop_duplicates(subset='Time', keep='last')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:24:21