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

如何合并DataFrame列表:同列拼接、按索引去重且不生成后缀

解决方法

要同时满足同名列无后缀拼接和基于索引列去重的需求,你可以用pd.concat先合并所有DataFrame,再通过groupby按索引列聚合,处理同列的重复数据。具体步骤如下:

步骤说明

  • 合并所有DataFrame到一个统一的数据集,保留所有行(包括重复的索引行)
  • 按指定的索引列分组,对每组内的列值进行聚合:优先保留非空值,确保同一索引只留唯一一行

示例代码

import pandas as pd

df1 = pd.DataFrame({'WeekCom':['2020-01-01','2020-01-02','2020-01-02','2020-01-03'],'Y':[2020,2020,2020,2020],'QT':['Q1','Q1','Q1','Q1'],'M':['Jan','Jan','Jan','Jan'],'W':['W1','W1','W1','W2'],'Col_X':[0,1,1,2],'Col_Y':[3,0,0,1]})
df2 = pd.DataFrame({'WeekCom':['2020-01-02','2020-01-04'],'Y':[2020,2020],'QT':['Q1','Q1'],'M':['Jan','Jan'],'W':['W1','W2'],'Col_X':[1,3],'Col_Z':[3,3]})

dataframe_list = [df1, df2]
list_of_indices = ['WeekCom','Y','QT','M','W']  # 你的索引列列表

# 1. 合并所有DataFrame,同名列无后缀
combined = pd.concat(dataframe_list)

# 2. 按索引列分组,聚合生成唯一行
merged_df = combined.groupby(list_of_indices, as_index=False).agg(
    lambda x: x.ffill().bfill().iloc[0]
)

print(merged_df)

代码解释

  • pd.concat(dataframe_list):纵向拼接所有DataFrame,同名列直接保留,不会生成_x/_y后缀
  • groupby(list_of_indices):按指定索引列分组,把同一索引的重复行归为一组
  • agg(lambda x: x.ffill().bfill().iloc[0]):对每组内的列值,先前后填充空值,再取第一行——既合并了不同DataFrame的有效数据,又确保每组只留唯一行

如果你的场景中,同一索引行的同名列不会出现冲突(比如df1和df2同索引行的Col_X值一致),可以简化聚合逻辑为agg('first')或agg('last'),直接取组内第一行/最后一行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:55:18