基于多列成组值设置Pandas DataFrame指定列数值的实现方法
问题原因
你原有代码不生效的核心是:df.iloc[:, 1:] == A是按列维度的广播对比,返回的是和df.iloc[:,1:]同维度的布尔矩阵,而非行维度的布尔序列,无法用来筛选符合四列组合条件的行。
高性能解决方案
方案1:单规则匹配(仅匹配[1,0,0,0]赋值为1)
直接基于numpy矢量化判断,全程无循环,百万级数据集也能毫秒级执行:
import pandas as pd import numpy as np # 按行判断A/B/C/D四列是否全等于目标数组,得到行筛选布尔掩码 match_mask = (df[["A", "B", "C", "D"]].values == [1, 0, 0, 0]).all(axis=1) # 用loc给符合条件的行赋值E列 df.loc[match_mask, "E"] = 1
注意:你示例数据里C列的0-1为笔误,实际应为-1,如果是字符串类型的数值,目标数组也要对应写为字符串格式
方案2:多规则匹配(多组四列值对应不同E值)
如果需要同时匹配多组不同的四列组合,用元组映射的方式更简洁高效:
# 定义组合值到E列的映射规则,key为(A,B,C,D)的元组,value为对应E值 value_map = { (1,0,0,0): 1, (0,0,0,1): 2, (1,0,-1,0): 3 } # 把每行四列的值转为元组后映射,未匹配的默认填充为0 df["E"] = df[["A", "B", "C", "D"]].apply(tuple, axis=1).map(value_map).fillna(0)
内容的提问来源于stack exchange,提问作者Gus
相关产品推荐
相关产品推荐

