如何筛选DataFrame中指定列存在多个非零不同值的行
技术百科
心靈之曲
发布时间:2026-01-27
浏览: 次 本文介绍一种简洁高效的方法,使用pandas的`replace`与`nunique`组合,快速识别在特定列中(排除0后)包含超过1个不同非零值的数据行。
在数据分析中,常

更优解是利用pandas内置的统计能力:将0替换为NaN(自然被nunique忽略),再按行计算非空唯一值数量。nunique(axis=1)默认自动跳过NaN,因此只需一步即可完成“排除0后统计不同非零值个数”的核心逻辑。
以下是完整示例代码:
import pandas as pd
df = pd.DataFrame({
'id': [1, 2, 3, 4],
'col_A': [1, 1, 1, 0],
'col_B': [2, 1, 0, 2],
'col_C': [3, 1, 0, 3],
'col_D': [4, 1, 1, 4],
'col_E': [5, 1, 1, 5]
})
# 筛选 col_ 开头的列,将0替换为NaN,按行统计非空唯一值数量 > 1 的行
mask = df.filter(like='col_').replace(0, float('nan')).nunique(axis=1) > 1
result = df[mask].copy()
print(result)输出:
id col_A col_B col_C col_D col_E 0 1 1 2 3 4 5 3 4 0 2 3 4 5
✅ 关键优势:
- 语义清晰:replace(0, NaN) + nunique() 直观表达“忽略零值后统计不同值”;
- 性能优异:避免逐行apply,全程向量化操作;
- 健壮性强:nunique天然处理NaN,无需额外条件判断;
- 灵活可扩展:只需修改filter()条件(如filter(regex=r'^code_'))即可适配任意列名模式。
⚠️ 注意事项:
- 若数据中已存在真实NaN,需先明确其业务含义——本方法会将其与0一并排除在计数外;
- float('nan')可简写为np.nan(需导入import numpy as np),效果一致;
- 如需保留原始列不变,建议对筛选结果使用.copy()避免链式赋值警告。
该方法体现了pandas“用原生操作替代手动循环”的最佳实践,推荐作为类似场景的标准解决方案。
# 将其
# 多个
# 链式
# 则可
# 只需
# 跳过
# 如需
# app
# 循环
# 编码
# Lambda
# Float
# 再按
# Filter
# copy
# pandas
# 本应
# Regex
# numpy
# 或为
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- C++中的Pimpl idiom是什么,有什么好处
- Go 中实现 Python urllib.quot
- Win11怎么查看显卡温度 Win11任务管理器查
- Flask 表单数据通过 SMTP 发送邮件的完整
- Win10怎么创建桌面快捷方式 Win10为应用创
- 如何使用Golang管理模块版本_Golanggo
- 本地php环境打开php文件直接下载_浏览器解析p
- Windows10系统怎么查看显卡驱动_Win10
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Win10怎么卸载金山毒霸_Win10彻底卸载金山
- Python大文件处理策略_内存优化说明【指导】
- 如何使用Golang实现聊天室消息存档_存储聊天记
- 如何优化Golang程序CPU性能_Golang
- 获取 PHP 文件最后修改时间的正确方法
- Win10如何更改用户账户控制_Windows10
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- php在Linux怎么部署_LNMP环境搭建PHP
- Win11如何暂停系统更新 Win11暂停更新最长
- Win10如何更改开机密码_Windows10登录
- 如何在Golang中处理数据库事务错误_回滚和日志
- c++ reinterpret_cast怎么用 c
- Windows服务启动类型恢复方法_错误修改导致的
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- PHP主流架构如何处理会话管理_Session与C
- Win11此电脑不在桌面上_Windows 11桌
- Win11怎么开启远程桌面_Win11系统远程桌面
- Python多线程使用规范_线程安全解析【教程】
- c++中的std::conjunction和std
- 如何在Golang中处理模块包路径变化_Golan
- Windows电脑如何截屏?(四种快捷方法)
- PHP cURL GET请求:正确设置认证与自定义
- c++如何实现多态性_c++ 虚函数表原理与动态绑
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- windows系统找不到无线网络怎么办_windo
- Windows 10怎么录屏_Windows 10
- php8.4如何调用com组件_php8.4win
- c++怎么用jemalloc c++替换默认内存分
- Win11怎么开启窗口对齐助手_Windows11
- Win11怎么设置默认图片查看器_Windows1
- 如何关闭Win10自动更新更新_Win10系统自动
- Win11怎么连接投影仪_Win11多显示器投屏设
- Mac自带的词典App怎么用_Mac添加和使用多语
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- 如何在 ACF 中正确更新嵌套多层 Group 字
- Win11怎么更改管理员名字 Win11修改账户名
- PHP接收参数值为空怎么办_判断和处理空参数方法说
- 如何使用Golang优化模块引入路径_Golang
- 如何使用Golang实现跨域请求支持_Golang
- php8.4匿名类怎么用_php8.4匿名类创建与

QQ客服