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
相关产品推荐
相关产品推荐

