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
相关产品推荐
相关产品推荐

