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

Python实现多组合DataFrame合并:亲子家庭关联匹配

解决DataFrame按姓氏关联亲子匹配的合并问题

输入数据

DataFrame 1(父母数据)

Parent  Family Name
Jack    Everdeen
Rita    Lawrence
Amy     Donnie
Eric    Everdeen
Nash    Donnie
Andrew  Paul
Lily    Donnie

DataFrame 2(子女数据)

Child   Family Name
Vivian  Everdeen
Alex    Donnie
Rose    Evans
Annie   Paul
Hugh    Lawrence
Billy   Donnie
Marc    Paul

当前问题

使用pd.concat仅完成简单拼接,未按姓氏关联生成所有可能的亲子匹配,不符合预期结果:

Parent  Family Name Child
0   Jack    Everdeen    NaN
1   Rita    Lawrence    NaN
2   Amy     Donnie      NaN
3   Eric    Everdeen    NaN
4   Nash    Donnie      NaN
5   Andrew  Paul        NaN
6   Lily    Donnie      NaN
0   NaN     Everdeen    Vivian
1   NaN     Donnie      Alex
2   NaN     Evans       Rose
3   NaN     Paul        Annie
4   NaN     Lawrence    Hugh
5   NaN     Donnie      Billy
6   NaN     Paul        Marc

正确解决方案

需使用pd.merge按Family Name做外连接,生成同一姓氏下所有父母与子女的组合,并将无匹配的父母值替换为0:

代码实现

import pandas as pd

# 构造输入DataFrame
df_parent = pd.DataFrame({
    'Parent': ['Jack', 'Rita', 'Amy', 'Eric', 'Nash', 'Andrew', 'Lily'],
    'Family Name': ['Everdeen', 'Lawrence', 'Donnie', 'Everdeen', 'Donnie', 'Paul', 'Donnie']
})

df_child = pd.DataFrame({
    'Child': ['Vivian', 'Alex', 'Rose', 'Annie', 'Hugh', 'Billy', 'Marc'],
    'Family Name': ['Everdeen', 'Donnie', 'Evans', 'Paul', 'Lawrence', 'Donnie', 'Paul']
})

# 按姓氏外连接,生成所有可能的亲子组合
merged_df = pd.merge(df_parent, df_child, on='Family Name', how='outer')

# 将无匹配的Parent填充为0
merged_df['Parent'] = merged_df['Parent'].fillna(0)

# 按姓氏排序优化结果展示
merged_df = merged_df.sort_values('Family Name').reset_index(drop=True)

print(merged_df)

预期输出

Parent Family Name    Child
0       0        Evans     Rose
1     Amy       Donnie      Alex
2     Amy       Donnie     Billy
3    Nash       Donnie      Alex
4    Nash       Donnie     Billy
5    Lily       Donnie      Alex
6    Lily       Donnie     Billy
7    Jack     Everdeen    Vivian
8    Eric     Everdeen    Vivian
9    Rita     Lawrence      Hugh
10  Andrew         Paul     Annie
11  Andrew         Paul      Marc

核心逻辑说明

  • how='outer':保留所有姓氏(包括无匹配父母的Evans)
  • 合并自动生成同一姓氏下父母与子女的笛卡尔积,覆盖所有可能的亲子匹配
  • fillna(0):将无匹配的父母位置替换为指定值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:54:29