Python中如何筛选DataFrame里A列值处于B列值±2%范围的数据?
pandas筛选A列在B列±2%范围内数据的正确写法
你写的代码报错是因为pandas的Series对象不能直接用连续比较运算符(比如a <= b <= c),得拆分条件并用元素级逻辑符连接。
正确步骤:
- 先构建布尔筛选掩码,每个条件单独加括号,用
&连接:mask = (df_['B'] * 0.98 <= df_['A']) & (df_['A'] <= df_['B'] * 1.02) - 用掩码筛选数据:
filtered_df = df_[mask] - 计算筛选后的数据行数:
len(filtered_df) # 或者直接用掩码求和(True会被视为1) mask.sum()
为啥原来的写法不行?
普通Python里a<=b<=c等价于a<=b and b<=c,但pandas里对Series用and会触发整体逻辑判断而非元素级判断,必须用&做元素级的与运算,同时括号不能少——因为&的优先级比<=高,不加括号会导致运算顺序出错。
内容的提问来源于stack exchange,提问作者BGM
相关产品推荐
相关产品推荐

