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

Pandas DataFrame执行双if逻辑运算结果不符合预期如何修复

问题原因

你的代码错误是第二次np.where操作覆盖了第一次的标记结果:

  • 第一次np.where已经将大于70的行的A_op赋值为1,其余为2
  • 第二次np.where的逻辑是:小于40的赋值为3,其余所有行统一赋值为2,这就把第一次标记的1直接覆盖成了2,所以78.5对应的等级错误变成了2。
修复方法

方法1:修改第二次np.where的逻辑

只修改符合小于40条件的行,其余行保留第一次的计算结果即可:

import pandas as pd
import numpy as np

# 示例df
df = pd.DataFrame({'A': [78.5, 54, 48, 21.1]})
adf = pd.DataFrame({'A_up':[70],'A_low':[40]})
adf = adf.loc[adf.index.repeat(len(df))]

df['A_op'] = np.where((df['A']>adf['A_up'].values),1, 2)
# 只改小于40的行,其余保留原有值
df['A_op'] = np.where((df['A']<adf['A_low'].values),3, df['A_op'])

方法2:使用更高效的pd.cut分箱(更适合大型DataFrame)

不需要额外创建重复的阈值表,一行代码就能完成分箱标记,性能更高:

df['A_op'] = pd.cut(df['A'], bins=[-float('inf'), 40, 70, float('inf')], labels=[3,2,1], right=False).astype(int)

这里right=False表示区间左闭右开,匹配你的需求:小于40为3、40<=数值<70为2、大于等于70为1,你也可以根据边界归属需求调整参数。

运行结果

两种方法输出都符合预期:

A  A_op
0  78.5     1
1  54.0     2
2  48.0     2
3  21.1     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:15:06