如何筛选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; ?>
】
相关推荐
- Drupal 中 HTML 链接被双重转义导致渲染
- Windows10如何更改鼠标灵敏度_Win10鼠
- Win11怎样安装网易云音乐_Win11安装网易云
- Python技术债务管理_长期维护解析【教程】
- Win10如何更改开机密码_Windows10登录
- PyTorch DDP 多进程训练在 Kaggle
- Windows10电脑怎么设置防火墙出站规则_Wi
- Golang如何遍历目录文件_Golang fil
- 如何提升Golang JSON序列化性能_Gola
- 如何使用Golang实现容器安全扫描_Golang
- Win11怎样安装微信开发者工具_Win11安装开
- MySQL 中使用 IF 和 CASE 实现查询字
- 如何在Golang中捕获JSON序列化错误_Gol
- C++如何解析JSON数据?(nlohmann/j
- mac怎么安装pip_MAC Python pip
- Go 中实现 Python urllib.quot
- Win10怎样安装Word样式库_Win10安装W
- 如何使用Golang搭建本地API测试环境_快速验
- Python安全爬虫设计_IP代理池与验证码识别策
- Go 中的 := 运算符:类型推导机制与使用边界详
- Windows怎样拦截QQ浏览器广告_Window
- Win11如何设置开机自动联网 Win11宽带连接
- Win11任务栏怎么调到左边_Win11开始菜单居
- Windows怎样拦截WPS弹窗广告_Window
- PythonWeb前后端整合项目教程_FastAP
- 如何使用正则表达式提取以编号开头、后接多个注解的逻
- Win11怎么设置DNS服务器_Windows11
- 如何在Golang中使用container/hea
- C++如何将C风格字符串(char*)转换为std
- Win11怎么设置指纹解锁 Win11笔记本录入指
- 手机php怎么转mp4_手机端php文件转mp4a
- Win11如何设置文件关联 Win11修改特定文件
- 为什么本地php环境运行php脚本卡顿_php执行
- Win10系统映像怎么恢复 Win10使用系统映像
- Go 语言标准库为何不提供泛型 Contains
- VSC怎样用终端运行PHP_命令行执行脚本的步骤【
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- Mac怎么安装软件_Mac安装dmg与pkg文件的
- Win11怎么清理C盘系统日志_Win11清理系统
- Mac如何将HEIC图片格式转为JPG_Mac批量
- 如何使用Golang捕获测试日志_Golang t
- Mac如何与安卓手机传文件_Mac和Android
- 如何使用Golang搭建Web开发环境_快速启动H
- php485函数执行慢怎么优化_php485性能提
- Win10如何卸载预装Edge扩展_Win10卸载
- 如何在Golang中写入XML文件_生成符合规范的
- Win11怎么设置单手模式_Win11触控键盘布局
- Python装饰器复用技巧_通用能力解析【教程】
- Go 中 defer 在 goroutine 内部
- Windows如何设置登录时的欢迎屏幕背景?(锁屏

QQ客服