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

如何基于多列条件修改Pandas DataFrame的pred列值?

Pandas DataFrame 修改逻辑实现问题

原始DataFrame

import pandas as pd

df = pd.DataFrame({'pred': [1, 2, 3, 4],
                   'a': [0.4, 0.6, 0.35, 0.5],
                   'b': [0.2, 0.4, 0.32, 0.1],
                   'c': [0.1, 0, 0.2, 0.2],
                   'd': [0.3, 0, 0.1, 0.2]})

需求说明

当同时满足以下两个条件时,将pred列对应行的值修改为0:

  1. a列的值大于b、c、d列的所有值
  2. b、c、d列中任意一列的值大于0.25

预期结果

pred     a     b     c     d
0      1  0.40  0.20  0.10  0.30
1      0  0.60  0.40  0.00  0.00
2      0  0.35  0.32  0.20  0.10
3      4  0.50  0.10  0.20  0.20

实现代码

# 生成条件1的布尔数组:a大于b、c、d的最大值
cond1 = df['a'] > df[['b', 'c', 'd']].max(axis=1)
# 生成条件2的布尔数组:b、c、d中任意一列大于0.25
cond2 = df[['b', 'c', 'd']].gt(0.25).any(axis=1)
# 定位满足双条件的行,修改pred值为0
df.loc[cond1 & cond2, 'pred'] = 0

逻辑解释

  • df[['b', 'c', 'd']].max(axis=1):计算每行中b、c、d三列的最大值,和a列比较即可判断a是否同时大于这三列的所有值
  • df[['b', 'c', 'd']].gt(0.25).any(axis=1):逐列判断b、c、d是否大于0.25,再通过any(axis=1)确认每行是否至少有一列满足该条件
  • 用&组合两个布尔条件,通过df.loc精准定位目标行,完成pred列的赋值修改

内容的提问来源于stack exchange,提问作者Reut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:20:22