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

如何在Pandas中匹配两个DataFrame的三列并赋值Task_ID

基于多列匹配为DataFrame添加对应列值

你可以通过pandas的merge函数实现需求,核心思路是指定三列作为匹配键进行左连接,将df2中匹配到的Task_ID映射到df1中。

步骤说明

  • 匹配依据:以Application_ID、Task Type、Task Category三列作为匹配键
  • 保留原数据:使用how='left'确保df1的所有行都被保留,仅为匹配成功的行填充Task_ID
  • 可选优化:处理df2中的重复匹配项,或为未匹配行设置默认值

代码示例

先定义示例数据(可替换为你的实际数据):

import pandas as pd

df1 = pd.DataFrame({
    'Application_ID': ['APP001', 'APP002', 'APP003'],
    'Task Type': ['Data Entry', 'Analysis', 'Reporting'],
    'Task Category': ['Admin', 'Business', 'Operations']
})

df2 = pd.DataFrame({
    'Application_ID': ['APP001', 'APP003', 'APP001'],
    'Task Type': ['Data Entry', 'Reporting', 'Data Entry'],
    'Task Category': ['Admin', 'Operations', 'Admin'],
    'Task_ID': [1234, 5678, 1234]
})

基础实现

仅保留必要列进行连接,避免引入多余字段,未匹配行的Task_ID会显示为NaN:

df1 = df1.merge(
    df2[['Application_ID', 'Task Type', 'Task Category', 'Task_ID']],
    on=['Application_ID', 'Task Type', 'Task Category'],
    how='left'
)

去重优化

如果df2中存在同一三列组合对应多个Task_ID的情况,先去重再连接避免df1行数增加:

# 按匹配列去重,保留第一个出现的Task_ID
df2_unique = df2.drop_duplicates(subset=['Application_ID', 'Task Type', 'Task Category'])

df1 = df1.merge(
    df2_unique[['Application_ID', 'Task Type', 'Task Category', 'Task_ID']],
    on=['Application_ID', 'Task Type', 'Task Category'],
    how='left'
)

未匹配行填充

若需要为未匹配行的Task_ID设置默认值(比如0或空字符串):

df1['Task_ID'] = df1['Task_ID'].fillna(0)  # 填充为数值0
# 或填充为空字符串
# df1['Task_ID'] = df1['Task_ID'].fillna('').astype(str)

内容的提问来源于stack exchange,提问作者Prasanna S US

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:45:36