Pandas - 确定每列唯一条目的百分比

时间:2014-02-24 16:50:15

标签: python pandas

说我有一个数据帧。我想知道,对于每一列,我有多少与数据帧总大小相关的唯一条目(百分比)。

换句话说,我想了解每列有多少“熵”。

我认为以下情况会这样做:

my_f = lambda x: x.unique()/len(x)
df.apply(my_fl) 

但我明白了:

ValueError: Shape of passed values is (35,), indices imply (35, 125)

不是apply调用我的lambda函数,每列一次?

1 个答案:

答案 0 :(得分:3)

我相信你需要:

my_f = lambda x: 1.0*len(x.unique())/len(x)

普通x.unique()将是唯一元素的数组。因此,x.unique()/len(x)将所有这些元素(按元素)乘以1.0/len(x),并根据每个组的唯一条目数量返回可变长度的数组。

请注意len(x)生成一个整数,而x.unique()生成一个数组,该数组的元素将具有它们碰巧在{{1 }}。因此,x根本没有明确定义的情况。即使它是技术定义的,也可能会给你意想不到的输出。

例如,如果x.unique()/len(x)中的一个条目是整数x并且4是整数len(x),那么表达式输出中的条目由于Python中整数除法的细节,对应于唯一值5的{​​{1}}实际上将是x.unique()/len(x)(!)。

因此,即使在纠正计算唯一数组的错误而不是唯一数组的长度之后,您仍然必须小心:4也会导致整数除以另一个整数,并且大多数分子小于分母的时间,产生0

考虑以下玩具示例:

len(x.unique())/len(x)