基于conflict列结果为Pandas DataFrame创建Overlap Status新列
实现方法
你可以通过以下3种常用的向量化操作完成需求,所有方法都会保留dfResults的原有列,仅新增目标字段:
方法1:使用numpy.where(推荐,大数据量下效率最高)
import numpy as np # conflict列为布尔类型,可直接作为判断条件 dfResults['Overlap Status'] = np.where(dfResults['conflict'], 'Overlapped', 'Did not Overlap')
方法2:使用pandas.Series.map(适合映射逻辑后续可能扩展的场景)
status_map = { True: 'Overlapped', False: 'Did not Overlap' } dfResults['Overlap Status'] = dfResults['conflict'].map(status_map)
方法3:使用apply(适合小数据量、逻辑复杂度高的场景)
dfResults['Overlap Status'] = dfResults['conflict'].apply(lambda x: 'Overlapped' if x else 'Did not Overlap')
如果你之前的赋值代码报错或结果不符合预期,通常是因为使用了逐行循环赋值、或者切片操作时触发了pandas的SettingWithCopy警告,使用上述向量化操作可以直接规避这类问题。
内容的提问来源于stack exchange,提问作者Mystical Me
相关产品推荐
相关产品推荐

