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

使用Pandas对比两个DataFrame,按规则新增列并替换列值

问题描述

现有两个DataFrame:df1和df2,需在df1中新增Task Name Support列,并按指定规则修改列值及Task Role列内容。

原始数据结构

df1结构:

Task NameTask Role
Review done-RE432Assignee1
Result generatedManager1
Results-RW212312Assignee2
#hold-resultsAssignee2
Change received-WE22321Assignee2
......

df2结构:

Task Names
Review change
Results generated
Review done
Change received
...

处理规则

  • 若df1的Task Name包含df2中某一Task Names内容(例如Review done匹配Review done-RE432),则将df2对应值填入Task Name Support;
  • 若不匹配(例如#hold-results),则将df1原Task Name值填入Task Name Support;
  • 匹配时保持Task Role原有值不变;
  • 不匹配时将Task Role替换为Unknown。

实现代码

使用Python的Pandas库可完成需求,代码如下:

import pandas as pd

# 假设df1和df2已加载完成
# 提取df2中的任务名称列表
task_patterns = df2['Task Names'].tolist()

# 定义匹配函数:返回对应支持名称和匹配状态
def match_task(task_name):
    for pattern in task_patterns:
        if pattern in task_name:
            return pattern, True
    return task_name, False

# 应用匹配逻辑到df1的每一行
df1[['Task Name Support', 'is_matched']] = df1['Task Name'].apply(
    lambda x: pd.Series(match_task(x))
)

# 根据匹配状态更新Task Role列
df1['Task Role'] = df1.apply(
    lambda row: row['Task Role'] if row['is_matched'] else 'Unknown',
    axis=1
)

# 移除临时的匹配状态列
df1.drop('is_matched', axis=1, inplace=True)

代码解释

  1. 先将df2的任务名称转为列表,便于遍历匹配;
  2. 定义match_task函数:遍历目标任务名称,检查是否包含在当前Task Name中,匹配成功返回目标名称和匹配标记,失败返回原名称和未匹配标记;
  3. 用apply函数将匹配逻辑应用到df1每行,生成Task Name Support列和临时匹配标记列;
  4. 根据匹配标记更新Task Role,未匹配行替换为Unknown;
  5. 移除临时标记列,得到最终结果。

验证结果

处理后的df1结构如下:

Task NameTask RoleTask Name Support
Review done-RE432Assignee1Review done
Result generatedManager1Results generated
Results-RW212312UnknownResults-RW212312
#hold-resultsUnknown#hold-results
Change received-WE22321Assignee2Change received
.........

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:12:09