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

标签 python pandas dataframe data-science

我想计算每列中唯一值的数量,并只选择那些唯一值少于 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))

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

最佳答案

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

关于python - 仅选择最多具有 N 个唯一值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56740611/

相关文章:

python Pandas : Is There a Faster Way to Split and Recombine a DataFrame based on criteria?

python - 在 Python 中为每一列使用相同的列表创建 Pandas DataFrame

python - 我如何解决TypeError : pow() takes exactly 2 arguments (3 given)?

python - 计算众数,同时忽略某些值

带有带括号的 header 的 Python DataFrame 错误

python - 根据前一行的值从数据框中过滤行

r - 如何将 R 数据帧拆分为向量(取消绑定(bind))

python - 如何为 Mac OS X 构建 python-nss 和 NSS?

python - 如何在一个 for 循环中遍历两个字典?

python - 根据列变化选择行