如何获取Pandas中所有值均唯一的列(含缺失值场景)
筛选DataFrame中所有值唯一的列
针对含NaN的场景,分两种常见需求给出解决方案:
需求1:列中所有元素(包括NaN)均唯一
如果要求整个列里没有任何重复元素(多个NaN也视为重复),你原来的代码其实已经可以直接处理这种情况:
df.columns[df.nunique(dropna=False) == len(df)]
原理:nunique(dropna=False)会把所有NaN算作同一个独特值,若列中有多个NaN,该列的nunique值会小于行数,自然会被筛选掉。比如某列有2个NaN和3个唯一非NaN值,nunique结果是4,而行数是5,4≠5,因此不会被选中。
需求2:列中非NaN值均唯一,NaN可重复出现
如果允许NaN多次出现,但要求所有非NaN值必须唯一,可以用以下代码:
df.columns[df.apply(lambda col: col.dropna().nunique() == col.dropna().size)]
原理:对每一列先剔除NaN值,再检查剩余元素的唯一值数量是否等于剩余元素的总数量,以此判断非NaN值是否全部唯一。
内容的提问来源于stack exchange,提问作者AndreyF
相关产品推荐
相关产品推荐

