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

Pandas如何删除动态获取的指定列子集内所有值均为0的行

功能实现说明

需求

对数据框dmt_clean做行过滤:如果某行在所有方案编号列下的取值都是0,就删除该行。方案编号列的数量会动态变化,不能手动写死列名。

数据样例

# dmt_clean原始样例
OptionNumber    TradeCategory   4015-7  4017-7  4019-7  4025-7  4030-6
0   1   Doors - Exterior    280.226822  280.226822  280.226822  280.226822  280.226822
1   1   Hardware    175.99  175.54  184.25  226.49  267.82
2   1   Trim - Interior 1818.783178 1904.233178 2252.523178 2589.283178 3323.953178
3   70000   Trim - Interior 0   0   0   0   0
4   70002   Trim - Interior 0   0   0   0   0

实现代码

步骤1:动态匹配方案编号列

用正则匹配规则自动筛选出所有格式为四位数字-1位数字的方案列,不需要手动指定:

import re
import pandas as pd

# 列表推导式简化写法,替代原有循环
l_plan_cols = [c for c in dmt_clean.columns if re.search(r'\d{4}-\d{1}', c)]

步骤2:过滤全0行

判断每一行在所有方案列下的取值是否全为0,仅保留不全为0的行:

# ~ 是取反操作,all(axis=1)代表一行的所有值都为True(即所有列都等于0)
dmt_clean = dmt_clean[~(dmt_clean[l_plan_cols] == 0).all(axis=1)]

逻辑验证

执行dmt_clean[l_plan_cols] == 0会得到布尔值数据框,样例如下:

4015-7  4017-7  4019-7  4025-7  4030-6
0   False   False   False   False   False
1   False   False   False   False   False
2   False   False   False   False   False
3   True    True    True    True    True
4   True    True    True    True    True
5   True    True    False   True    True
6   False   False   False   True    False

调用.all(axis=1)后,只有索引3、4的行返回True,取反后这两行会被过滤,其余行保留,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:45:04