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

Python中判断值是否在DataFrame连续列值区间内的问题

解决:查找数值所在区间对应的低级别

你的代码为啥失效?

因为amount列是从小到大递增的,你写的判断条件完全搞反了!要找2600落在[2500,2800]区间,正确逻辑是「前一个值≤2600<后一个值」,但你写的2600 < 前一个值且2600≥后一个值,在递增序列里根本不可能成立,所以代码永远不会给lev赋值,自然是空的。

修正后的循环实现

lev = None
for i in range(len(df)-1):
    lower_val = df["amount"].iloc[i]
    upper_val = df["amount"].iloc[i+1]
    if lower_val <= 2600 < upper_val:
        lev = df["level"].iloc[i]
        break  # 找到目标区间后直接终止循环,提升效率
print(lev)  # 输出结果:lev.2

这里用iloc按位置索引更稳妥,能避免DataFrame索引不是连续整数的情况。

更简洁的Pandas向量化写法

不用循环,直接利用布尔索引筛选:

# 生成区间判断条件:当前行amount≤2600,下一行amount>2600
condition = (df["amount"] <= 2600) & (df["amount"].shift(-1) > 2600)
# 提取对应的level值
lev = df.loc[condition, "level"].iloc[0]
print(lev)  # 输出结果:lev.2

shift(-1)会把amount列整体上移一行,刚好和当前行组成连续区间,直接筛选就能拿到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:47:48