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

如何基于多列组合为Pandas DataFrame标记主合约?

Pandas 实现首次组合标记的最优方法

需求:基于ID、Contract Type、Company三列的组合,为首次出现的组合标记Yes,重复出现的标记No,生成新列Primary Contract。

最优实现方法是利用Pandas内置的duplicated()函数,这是效率最高的向量化操作,代码简洁且性能优异:

  1. 构造示例DataFrame(已有数据可跳过此步骤):
import pandas as pd

data = {
    'ID': [10000, 10000, 10000, 10001, 10002, 10002, 10002, 10003, 10003, 10003, 10003],
    'Contract Type': ['Employee', 'Contingent', 'Employee', 'Non-Worker', 'Employee', 'Employee', 'Employee', 'Contingent', 'Employee', 'Employee', 'Employee'],
    'Company': ['Fake', 'Fake', 'Fake', 'Fake5', 'Fake4', 'Fake4', 'Fake4', 'Fake3', 'Fake3', 'Fake4', 'Fake4']
}
df = pd.DataFrame(data)
  1. 生成目标列:
# 检测指定列组合的重复行,取反后映射为Yes/No
df['Primary Contract'] = ~df.duplicated(subset=['ID', 'Contract Type', 'Company']).map({True: 'Yes', False: 'No'})

方法说明:

  • duplicated(subset=...):指定需要检测重复的列集合,默认保留首次出现的行标记为False,后续重复行标记为True。
  • ~:对布尔值取反,让首次出现的行变为True,重复行变为False。
  • map({True: 'Yes', False: 'No'}):将布尔值转换为需求的字符串标记。

执行后得到的结果完全符合预期:

ID Contract Type Company Primary Contract
0   10000       Employee    Fake              Yes
1   10000    Contingent    Fake              Yes
2   10000       Employee    Fake               No
3   10001    Non-Worker   Fake5              Yes
4   10002       Employee   Fake4              Yes
5   10002       Employee   Fake4               No
6   10002       Employee   Fake4               No
7   10003    Contingent   Fake3              Yes
8   10003       Employee   Fake3              Yes
9   10003       Employee   Fake4              Yes
10  10003       Employee   Fake4               No

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:50:32