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

如何纵向合并多个DataFrame并同步添加源数据集ID列

Pandas 多DataFrame纵向合并同时新增来源标记列实现方案

方案1:pd.concat原生参数一步实现(推荐,不修改原始数据)

直接利用pandas合并函数自带的keys参数生成标记,不需要提前修改任何原始DataFrame,代码最简洁:

import pandas as pd

# 按你需要的合并顺序,把所有待合并的DataFrame存入列表
df_to_merge = [df1, df2, df3]

# 一步完成合并+标记列生成
merged_df = pd.concat(
    df_to_merge,
    keys=range(1, len(df_to_merge)+1), # 按顺序生成1、2、3...的标记值,和列表里的df一一对应
    names=["source_id"] # 标记列的列名,可根据需求自定义
).reset_index(level="source_id").reset_index(drop=True)

参数说明:第一次reset_index是把concat生成的多层索引中的来源标记提取为普通列,第二次reset_index(drop=True)是重置合并后DataFrame的行索引,避免原始df的索引重复;如果需要保留原始df的行索引,去掉第二次reset_index即可。

方案2:预加列后合并(逻辑直观,适合自定义标记规则)

如果后续需要调整标记规则(比如用DataFrame名称、自定义业务标签代替数字序号),可以先给每个df加完标记列再合并,逻辑更易修改:

import pandas as pd

df_to_merge = [df1, df2, df3]

# 遍历给每个df新增标记列,start=1保证序号从1开始计数
for seq, df in enumerate(df_to_merge, start=1):
    df["source_id"] = seq

# 直接纵向合并即可,ignore_index=True自动重置行索引
merged_df = pd.concat(df_to_merge, ignore_index=True)

注意:该方法会直接修改你原始的df1、df2、df3,给它们新增source_id列,如果不想改动原始数据,可以在循环里用df = df.copy()先复制副本再操作。

效果验证

举个最简测试用例:

df1 = pd.DataFrame({"value": [1,2]})
df2 = pd.DataFrame({"value": [3,4]})
df3 = pd.DataFrame({"value": [5,6]})

用上述任意一种方法合并后,结果如下,完全符合“同一原始df的行标记相同、序号按顺序从1递增”的要求:

source_idvalue
11
12
23
24
35
36

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:33:40