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

如何合并多个同结构的时序DataFrame?

合并同结构时序DataFrame的正确方式

问题场景

我有一组结构完全一致的时序DataFrame,每个DataFrame包含相同的id数据点,仅utc和temp字段的值不同。示例数据如下:

df1

id          name2       geom            utc                             temp                                                                        
140826      AAA140826   POLYGON ((...)) 2010-07-01T00:00:00.000000000   15.3
140827      AAA140827   POLYGON ((...)) 2010-07-01T00:00:00.000000000   17.3
140828      AAA140828   POLYGON ((...)) 2020-07-01T00:00:00.000000000   10.0

df2

id          name2       geom            utc                             temp                                                                        
140826      AAA140826   POLYGON ((...)) 2010-08-01T00:00:00.000000000   11.3
140827      AAA140827   POLYGON ((...)) 2010-08-01T00:00:00.000000000   10.3
140828      AAA140828   POLYGON ((...)) 2010-08-01T00:00:00.000000000   12.0

df3

id          name2       geom            utc                             temp                                                                        
140826      AAA140826   POLYGON ((...)) 2010-09-01T00:00:00.000000000   13.3
140827      AAA140827   POLYGON ((...)) 2010-09-01T00:00:00.000000000   18.3
140828      AAA140828   POLYGON ((...)) 2010-09-01T00:00:00.000000000   12.0

期望合并后得到按id分组、包含所有时序记录的结果:

id          name2       geom            utc                             temp                                                                        
140826      AAA140826   POLYGON ((...)) 2010-07-01T00:00:00.000000000   15.3
140826      AAA140826   POLYGON ((...)) 2010-08-01T00:00:00.000000000   11.3
140826      AAA140826   POLYGON ((...)) 2010-09-01T00:00:00.000000000   13.0
140827      AAA140827   POLYGON ((...)) 2010-07-01T00:00:00.000000000   17.3
140827      AAA140827   POLYGON ((...)) 2010-08-01T00:00:00.000000000   10.3
140827      AAA140827   POLYGON ((...)) 2010-09-01T00:00:00.000000000   18.0
140828      AAA140828   POLYGON ((...)) 2010-07-01T00:00:00.000000000   10.0
140828      AAA140828   POLYGON ((...)) 2010-08-01T00:00:00.000000000   12.0
140828      AAA140828   POLYGON ((...)) 2010-09-01T00:00:00.000000000   12.0

但用pd.merge逐个合并时,出现错误:Passing 'suffixes' which cause duplicate columns {'temp_x'} is not allowed。


错误原因

pd.merge是用来做横向列合并的工具,适合整合带有不同变量的DataFrame;而你的需求是纵向行堆叠,把所有DataFrame的行整合到一起,用merge完全找错了工具,才会触发列重复的错误。

正确解决方案

用pd.concat()直接纵向拼接所有同结构的DataFrame,代码如下:

import pandas as pd

# 将所有需要合并的DataFrame放入列表
dfs = [df1, df2, df3]
# 执行纵向拼接,重置索引避免重复
merged_df = pd.concat(dfs, ignore_index=True)

# 可选:按id排序,和期望结果结构一致
merged_df = merged_df.sort_values(by='id').reset_index(drop=True)

关键参数说明

  • ignore_index=True:合并后重置索引,避免保留原DataFrame的重复索引
  • sort_values(by='id'):按id分组排序,让结果和预期结构匹配
  • 后续新增同结构DataFrame时,直接添加到dfs列表即可,无需修改拼接逻辑

内容的提问来源于stack exchange,提问作者Gago-Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:08:13