在pandas中,人们可以简单地使用DataFrame.nunique
来获取所请求轴上的不同观察数量。我一直试图用一个有4列的numpy数组做同样的事情。但是,我对(部分)失败感到沮丧。
起初我尝试np.unique(a, axis=0)
,但这会返回一个具有唯一值本身的数组。然后我尝试将其与np.size()
结合使用,它可以正常工作,但一次只返回一列的计数。
如何获取所有列的计数并将其存储在新数组中?理想情况下,我想一次性完成此操作而不使用for-loop
。
答案可能很简单,但仍然没有找到我!
答案 0 :(得分:1)
计算每个numpy数组列中的唯一值需要沿零轴进行切片和ufunc操作。这可以使用两种方法完成:
a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
def nunique_percol_sort(a):
b = np.sort(a,axis=0)
return (b[1:] != b[:-1]).sum(axis=0)+1
def nunique_percol_bincount(a):
n = a.max()+1
a_off = a+(np.arange(a.shape[1]))*n
M = a.shape[1]*n
return (np.bincount(a_off.ravel(), minlength=M).reshape(-1,n)!=0).sum(1)
问题发布后,用户Divakar在单独的post中提供了此答案。