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

如何基于共享Datetime列合并多个Pandas DataFrame?

合并多测量源带时间戳的DataFrame解决方案

核心思路

问题出在未按时间戳精确对齐:直接用concat(axis=1)会按行号而非时间戳合并,导致冗余行或多Datetime列;设索引后报错通常是索引类型不统一、存在重复索引或数据结构异常。以下是标准化解决步骤:


步骤1:统一时间戳格式

先确保所有DataFrame的Datetime列为datetime类型,避免字符串格式不一致导致索引对齐失败:

import pandas as pd

# 转换每个DataFrame的时间戳列
df_a['Datetime'] = pd.to_datetime(df_a['Datetime'])
df_b['Datetime'] = pd.to_datetime(df_b['Datetime'])
df_c['Datetime'] = pd.to_datetime(df_c['Datetime'])

步骤2:处理重复时间戳(可选但关键)

若单个测量源存在重复时间戳,需先聚合或去重,否则合并时会出现索引冲突:

# 示例:对重复时间戳的行取均值,也可选择保留第一行/最后一行
df_a = df_a.groupby('Datetime').mean().reset_index()
df_b = df_b.groupby('Datetime').first().reset_index()

步骤3:设置时间戳为索引

将Datetime设为每个DataFrame的索引,确保合并时按时间戳对齐:

df_a = df_a.set_index('Datetime')
df_b = df_b.set_index('Datetime')
df_c = df_c.set_index('Datetime')

步骤4:合并并区分测量源

给不同源的列加前缀避免重名,再用concat按列合并,可选择保留所有时间戳(join='outer')或仅保留共同时间戳(join='inner'):

# 给列名加前缀区分测量源
df_a = df_a.add_prefix('source_a_')
df_b = df_b.add_prefix('source_b_')
df_c = df_c.add_prefix('source_c_')

# 合并DataFrame
merged_df = pd.concat([df_a, df_b, df_c], axis=1, join='outer')

# 可选:将时间戳从索引转回列
merged_df = merged_df.reset_index()

示例验证

假设输入数据:

DataFrame A:

DatetimeValue1
2024-01-01 00:00:0010
2024-01-01 00:05:0012

DataFrame B:

DatetimeValue2
2024-01-01 00:00:0020
2024-01-01 00:10:0025

DataFrame C:

DatetimeValue3
2024-01-01 00:05:0030
2024-01-01 00:10:0035

执行上述步骤后,合并结果与预期一致:

Datetimesource_a_Value1source_b_Value2source_c_Value3
2024-01-01 00:00:001020NaN
2024-01-01 00:05:0012NaN30
2024-01-01 00:10:00NaN2535

常见报错处理

  1. 设索引后concat报错:检查是否所有索引都是datetime类型,或某个DataFrame处理后变为Series(需确保每个DataFrame至少保留一列数据)。
  2. 合并后出现重复行:检查各DataFrame是否存在未处理的重复时间戳,执行步骤2去重/聚合即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:27:39