如何基于多列条件修改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:
a列的值大于b、c、d列的所有值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
相关产品推荐
相关产品推荐

