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

Python Pandas如何按Name匹配合并两个DataFrame生成新表

实现方案

核心逻辑

两个DataFrame通过公共字段Name做关联匹配即可:df1存储的是人员-所属团队的固定映射关系,df2存储的是按日期记录的人员状态全量明细。我们以明细数据所在的df2为基表做左连接,就能在不丢失任何一条原有状态记录的前提下,给每条记录匹配上对应的Team值,完全符合需求。

完整代码

首先确保已经安装pandas库,之后按如下步骤编写代码:

import pandas as pd

# ----------------------
# 1. 构造测试数据(实际使用时替换为自己的df1、df2读取逻辑即可)
# ----------------------
df1 = pd.DataFrame({
    'Name': ['John', 'Nathan', 'Eric'],
    'Team': ['A', 'B', 'C']
})

df2 = pd.DataFrame({
    'Date': ['01/01/2022', '02/01/2022', '03/01/2022', 
             '01/01/2022', '02/01/2022', '03/01/2022', '04/01/2022'],
    'Name': ['John', 'John', 'John', 'Nathan', 'Nathan', 'Eric', 'Eric'],
    'Status': ['Active', 'Active', 'Active', 'Active', 
               'Active', 'Deactivated', 'Active']
})

# ----------------------
# 2. 核心关联合并逻辑
# ----------------------
# 以Name为关联键,左连接保留df2全部明细
df3 = df2.merge(df1, on='Name', how='left')

# 如果需要和示例一样把最后一列列名改为小写team,加这一行即可
df3 = df3.rename(columns={'Team': 'team'})

# ----------------------
# 3. 结果校验
# ----------------------
print(df3)

运行后输出结果和要求的df3结构完全一致:

Date    Name       Status team
0  01/01/2022    John       Active    A
1  02/01/2022    John       Active    A
2  03/01/2022    John       Active    A
3  01/01/2022  Nathan       Active    B
4  02/01/2022  Nathan       Active    B
5  03/01/2022    Eric  Deactivated    C
6  04/01/2022    Eric       Active    C

注意事项

  • 如果数据里Name字段存在首尾空格、大小写不统一的情况,很容易出现匹配失败、Team列空值的问题,合并前可以先做简单清洗:
    df1['Name'] = df1['Name'].str.strip().str.title()
    df2['Name'] = df2['Name'].str.strip().str.title()
    
  • 合并完成后可以用df3[df3['team'].isna()]查看有没有匹配失败的记录,如果有输出说明df2里存在df1未登记团队信息的人员,需要补全维度数据。
  • 如果确定两个表的Name值完全一一对应没有缺失,把how='left'换成how='inner'得到的结果一致,但左连接容错性更高,不会意外丢失明细数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:42:05