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

在Pandas中按行计算唯一值时排除值0的实现方法

解决Pandas按行计算唯一值并排除0的问题

嘿,我来帮你搞定这个需求~首先咱们先重现你给出的数据集:

import pandas as pd

d = {'col1': [1, 2, 3], 'col2': [3, 4, 0], 'col3': [0, 4, 0],}
df = pd.DataFrame(data=d)

对应的DataFrame长这样:

col1  col2  col3
0     1     3     0
1     2     4     4
2     3     0     0

你说直接用df.nunique(axis=1)会把0也算进去,确实不符合要求,这里给你两种实用的解决方案:

方法一:把0替换成NaN再用nunique

Pandas的nunique()方法默认会忽略NaN值,所以咱们先把所有0替换成缺失值,再按行统计唯一值数量就行:

df['uniques'] = df.replace(0, pd.NA).nunique(axis=1)

执行完之后,你就能得到想要的结果:

col1  col2  col3  uniques
0     1     3     0        2
1     2     4     4        2
2     3     0     0        1

方法二:用apply自定义过滤逻辑

如果你需要更灵活地控制排除规则(比如以后要排除其他值),可以用apply()配合lambda函数,手动过滤掉0后统计唯一值:

df['uniques'] = df.apply(lambda row: len(set(x for x in row if x != 0)), axis=1)

这个方法会逐行遍历,生成一个剔除0的元素集合,集合的长度就是咱们要的唯一值数量,结果和第一种方法完全一致。

两种方法都能解决问题,第一种更简洁高效,适合大多数场景;第二种扩展性更强,适合需要自定义规则的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:13:15