仅选择最多具有 N 个唯一值的列

Posted

技术标签:

【中文标题】仅选择最多具有 N 个唯一值的列【英文标题】:Select only columns that have at most N unique values 【发布时间】:2019-11-06 11:58:44 【问题描述】:

我想计算每列中唯一值的数量,并仅选择那些具有少于 32 个唯一值的列。

我尝试使用 df.filter(nunique<32)

df[[ c for df.columns in df if c in c.nunique<32]] 

但是因为 nunique 是一种方法而不是函数,所以它们不起作用。认为 len(set() 会起作用并尝试过

df.apply(lambda x : len(set(x))

但效果不佳。请问有什么想法吗?提前致谢!

【问题讨论】:

【参考方案1】:

nunique 可以在整个 DataFrame 上调用(你必须调用它)。然后,您可以使用 loc 过滤掉列:

df.loc[:, df.nunique() < 32]

最小可验证示例

df = pd.DataFrame('A': list('abbcde'), 'B': list('ababab'))
df
   A  B
0  a  a
1  b  b
2  b  a
3  c  b
4  d  a
5  e  b

df.nunique()
A    5
B    2
dtype: int64

df.loc[:, df.nunique() < 3]
   B
0  a
1  b
2  a
3  b
4  a
5  b

【讨论】:

以上是关于仅选择最多具有 N 个唯一值的列的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中选择具有唯一列值的行

在 Oracle 中仅选择没有 Null 值的列

sql 选择仅包含空值的列

POSTGRES:如何仅在另一个值不存在时选择具有某个值的行,在这种情况下选择另一个值?

选择可能具有相同值的行的多个实例

VBA-如何选择具有值的列单元格