如何判断DataFrame值是否唯一并统计唯一值数量?
DataFrame指定列唯一值判断与统计方案
你的代码问题修正
你写的c=~df[col].duplicated(keep=False).sum()逻辑顺序错了:
df[col].duplicated(keep=False)返回的布尔Series里,重复值对应True,唯一值对应False- 你现在的写法会先把这个布尔序列求和(得到重复值的总个数),再对这个数字取反,结果完全不是你要的唯一值数量
- 正确写法是先取反(让唯一值变成True),再求和:
c = (~df[col].duplicated(keep=False)).sum()
其他实现方式
方法1:用value_counts直接统计
统计每个值的出现次数,再筛选出仅出现1次的数量:
# 简洁版写法 unique_count = (df[col].value_counts() == 1).sum()
方法2:用drop_duplicates获取唯一值集合
直接提取只出现一次的数值,再取长度:
only_unique_values = df[col].drop_duplicates(keep=False) unique_count = len(only_unique_values)
方法3:通过总唯一值减重复唯一值计算
先算所有不重复的值的总数,再减去那些出现多次的值的数量:
total_unique = df[col].nunique() # 统计出现次数≥2的唯一值数量 duplicated_unique_num = (df[col].value_counts() > 1).sum() unique_count = total_unique - duplicated_unique_num
获取每行的唯一状态布尔序列
如果需要得到每行对应的布尔值(True表示该值唯一,False表示重复),直接用:
is_row_unique = ~df[col].duplicated(keep=False)
内容的提问来源于stack exchange,提问作者noride_togo
相关产品推荐
相关产品推荐

