如何在Pandas DataFrame中基于多列规则生成新列four_of_five
Pandas实现多列条件判断生成新列
首先构造原始数据集:
import pandas as pd df = pd.DataFrame({ 'person': ['mike', 'Anton'], 'health': [40, 20], 'life': [50, 30], 'power': [45, 10], 'nexy': [20, 50], 'prox': [40, 40] })
无需堆砌复杂的if/or语句,直接用Pandas的向量化运算就能高效完成需求:
实现步骤
- 选中需要判断的5列,对每个元素判断是否≥40,得到布尔值组成的DataFrame
- 按行求和(True会被计为1,False计为0),统计每行符合条件的列数
- 根据求和结果映射为
yes或no:计数≥4则返回yes,否则返回no
对应代码如下:
# 指定需要判断的目标列 target_cols = ['health', 'life', 'power', 'nexy', 'prox'] # 计算每行符合条件的列数量 qualified_count = df[target_cols].ge(40).sum(axis=1) # 生成新列 df['four_of_five'] = qualified_count.ge(4).map({True: 'yes', False: 'no'})
执行后得到的结果:
person health life power nexy prox four_of_five 0 mike 40 50 45 20 40 yes 1 Anton 20 30 10 50 40 no
代码说明
df[target_cols].ge(40):批量判断目标列的每个值是否≥40,返回布尔矩阵.sum(axis=1):按行汇总布尔值,得到每行符合条件的列数.ge(4).map(...):判断计数是否达标,再将布尔结果转换为指定的文本标识
这种方法完全依赖Pandas的向量化特性,代码简洁且执行效率高。
内容的提问来源于stack exchange,提问作者noob4ever
相关产品推荐
相关产品推荐

