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

如何为拼接后的Pandas DataFrame添加多来源标识列?

解决多DataFrame拼接后的多来源标识问题

我来帮你搞定这个问题!核心思路是先给每个小DataFrame打上专属标识,再通过分组合并的方式保留重复行的多来源标记,具体步骤如下:

1. 给每个小DataFrame添加专属标识列

首先,为每个小型DataFrame单独设置标识列:对应自身来源的列设为1,其余标识列设为0。这样拼接后,重复行的对应标识列会出现多个1,后续我们只需要合并这些值即可。

举个示例,假设你有4个小DataFrame:

import pandas as pd

# 创建示例数据(你可以替换成自己的真实数据)
df1 = pd.DataFrame({'Forename': ['charlie'], 'Surname': ['jim']})
df2 = pd.DataFrame({'Forename': ['ian'], 'Surname': ['james']})
df3 = pd.DataFrame({'Forename': [], 'Surname': []})  # 假设df3暂时无数据
df4 = pd.DataFrame({'Forename': ['jon', 'charlie'], 'Surname': ['smith', 'jim']})

给每个DataFrame批量添加标识列:

# 定义所有标识列名称
ind_cols = ['Ind_1', 'Ind_2', 'Ind_3', 'Ind_4']

# 循环给每个小DataFrame打标识
for idx, df in enumerate([df1, df2, df3, df4]):
    # 先把所有标识列初始化为0
    df[ind_cols] = 0
    # 当前DataFrame对应的标识列设为1
    df[ind_cols[idx]] = 1

2. 拼接所有DataFrame

用pd.concat把打了标识的小DataFrame拼接到一起:

combined_df = pd.concat([df1, df2, df3, df4], ignore_index=True)

此时拼接后的结果里,重复行(比如charlie jim)会出现两次,分别带有Ind_1=1和Ind_4=1的标记。

3. 合并重复行并保留多来源标识

按姓名(Forename+Surname)分组,对每个标识列取最大值——这样就能把同一行在多个DataFrame里的标识都保留为1:

final_df = combined_df.groupby(['Forename', 'Surname'], as_index=False).max()

最终结果

运行上述代码后,你会得到完全符合预期的DataFrame:

Forename Surname  Ind_1  Ind_2  Ind_3  Ind_4
0  charlie      jim      1      0      0      1
1      ian    james      0      1      0      0
2      jon    smith      0      0      0      1

这个方法既解决了单一来源行的标记问题,也完美处理了重复行的多来源标记,而且如果后续新增小DataFrame,只需要扩展ind_cols和循环列表即可,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:05:13