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

如何用Pandas基于多行列条件将合格课程标记为Superseded?

高效处理Pandas中课程替代标记需求

需求说明

需将满足以下全部条件的课程Result字段修改为Superseded:

  • 该课程的Result为Pass
  • Superseded_by列中的课程存在于当前记录的Course列中
  • 被替代课程(Superseded_by对应课程)的Result也为Pass

原始数据

import pandas as pd

df = pd.DataFrame({
        'Course': ['A', 'B', 'C', 'D', 'E','F','G'],
        'Result': ['Pass', 'Fail', 'Pass', 'Fail', 'Pass','Fail','Pass'],
        'Superseded_by':['E','E','F','F','','','H']        
     })
print(df)

输出:

Course Result Superseded_by
0      A   Pass             E
1      B   Fail             E
2      C   Pass             F
3      D   Fail             F
4      E   Pass              
5      F   Fail              
6      G   Pass             H

高效实现方案

利用Pandas矢量化操作+字典映射,避免低效的跨行循环,代码如下:

# 构建课程到结果的映射字典,实现O(1)快速查询
course_result_map = df.set_index('Course')['Result'].to_dict()

# 生成三个条件的布尔掩码
condition1 = df['Result'] == 'Pass'
condition2 = df['Superseded_by'].isin(course_result_map)
condition3 = df['Superseded_by'].map(course_result_map) == 'Pass'

# 合并条件,批量修改符合要求的Result值
df.loc[condition1 & condition2 & condition3, 'Result'] = 'Superseded'

print(df)

输出结果:

Course      Result Superseded_by
0      A  Superceded             E
1      B        Fail             E
2      C        Pass             F
3      D        Fail             F
4      E        Pass              
5      F        Fail              
6      G        Pass             H

方案优势

  • 字典映射实现O(1)复杂度的课程结果查询,比merge或apply循环效率高得多
  • 布尔索引是Pandas原生矢量化操作,批量处理数据性能最优,适合大规模数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:30:21