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

如何用Pandas删除x、y、z坐标在指定几何框内的行?

Pandas筛选DataFrame:排除同时满足多条件的行

可以用pandas的布尔索引结合条件取反快速实现,核心是先定位需要排除的行,再筛选出剩余行。

步骤示例

  1. 先构造与你示例一致的DataFrame:
import pandas as pd

df = pd.DataFrame({
    'y': [0.8, 1, 1, -0.4, 0],
    'x': [0.5, -0.3, -0.3, 1.5, 0.2],
    'z': [2, 0, 0, 0, 1]
})
  1. 定义排除条件(同时满足三个区间要求的行),再通过取反筛选目标行:
# 用between简化开区间判断,inclusive='neither'表示不包含区间端点
exclude_mask = (df['x'].between(-1, 1, inclusive='neither') & 
                df['y'].between(-1, 1.5, inclusive='neither') & 
                df['z'].between(-2.5, 2.5, inclusive='neither'))

# ~符号对布尔掩码取反,保留不满足排除条件的行
result_df = df[~exclude_mask]

执行后得到的result_df就是你要的预期输出:

y    x    z
1  1.0 -0.3  0.0
2  1.0 -0.3  0.0
3 -0.4  1.5  0.0

兼容旧版pandas的写法

如果你的pandas版本低于1.3.0(不支持inclusive参数),可以手动写比较逻辑:

exclude_mask = ((df['x'] > -1) & (df['x'] < 1) & 
                (df['y'] > -1) & (df['y'] < 1.5) & 
                (df['z'] > -2.5) & (df['z'] < 2.5))
result_df = df[~exclude_mask]

另一种等价写法(逻辑转换)

根据逻辑运算规则,"排除同时满足A、B、C的行"等价于"保留至少不满足A/B/C中一个条件的行",也可以这样写:

keep_mask = (~df['x'].between(-1, 1, inclusive='neither')) | 
            (~df['y'].between(-1, 1.5, inclusive='neither')) | 
            (~df['z'].between(-2.5, 2.5, inclusive='neither'))
result_df = df[keep_mask]

效果和之前完全一致,选哪种写法看个人习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:30