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

基于多列成组值设置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:04