如何基于多列组合为Pandas DataFrame标记主合约?
Pandas 实现首次组合标记的最优方法
需求:基于ID、Contract Type、Company三列的组合,为首次出现的组合标记Yes,重复出现的标记No,生成新列Primary Contract。
最优实现方法是利用Pandas内置的duplicated()函数,这是效率最高的向量化操作,代码简洁且性能优异:
- 构造示例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)
- 生成目标列:
# 检测指定列组合的重复行,取反后映射为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
相关产品推荐
相关产品推荐

