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

如何合并15个列名相同但索引可能重复的DataFrame?

合并多个同列名、索引可能重复的DataFrame方案

嘿,我来帮你搞定合并15个列名相同但索引可能重复的DataFrame的问题!先从你提到的测试数据开始,咱们先把生成测试数据的代码贴出来(方便你复现场景):

import pandas as pd
import numpy as np

# 生成15个测试DataFrame的示例
dfs = []
for i in range(15):
    # 生成带重复索引的DF,列名都是A、B、C
    df = pd.DataFrame(
        {'A': np.random.randint(1, 10, 5),
         'B': np.random.randn(5),
         'C': np.random.choice(['X', 'Y'], 5)},
        index=np.random.choice([1, 2, 3, 4, 5], 5)  # 故意生成重复索引
    )
    dfs.append(df)

接下来分几种最常用的合并场景来介绍,你可以根据自己的需求选:

场景1:保留所有原始行(包括重复索引)

这是最基础的合并方式,pd.concat会自动对齐所有相同列名的列,不管索引是否重复,所有DF里的行都会原封不动保留下来:

# 直接合并列表里的15个DF
merged_df = pd.concat(dfs)

合并后,索引会保留每个DF原来的索引值(哪怕重复),列还是原来的A、B、C三列,不会新增列。

场景2:忽略原索引,生成连续新索引

如果你不需要保留原有的索引,只想把所有数据按顺序堆叠起来,只需要给concat加个ignore_index=True参数:

merged_df = pd.concat(dfs, ignore_index=True)

这样新的DF索引会变成从0开始的连续整数,完全和原索引无关。

场景3:对重复索引的行做聚合处理

如果同一个索引在多个DF里都有数据,你想把这些行合并成一行(比如求和、取均值、保留第一个值),可以先合并再按索引分组聚合:

# 先合并所有DF,再按索引分组求和
merged_df = pd.concat(dfs).groupby(level=0).sum()

# 或者取每组的第一个值
merged_df = pd.concat(dfs).groupby(level=0).first()

# 或者取均值
merged_df = pd.concat(dfs).groupby(level=0).mean()

这里level=0表示按最外层索引分组(适合单索引的情况),你可以根据需求替换聚合函数,比如max()、min()甚至自定义函数。

几个小提醒

  • 确保所有DF的列名完全一致!如果有大小写差异(比如有的是a有的是A),先统一列名:
    # 把所有DF的列名转成小写
    for df in dfs:
        df.columns = df.columns.str.lower()
    
  • 合并后如果有缺失值,可以用merged_df.fillna()处理,比如填充0或者前向填充:
    merged_df = merged_df.fillna(0)  # 用0填充NaN
    merged_df = merged_df.ffill()    # 前向填充
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:13:03