np.unique() 和 df.nunique() 获取唯一值 一、np.unique()  二、df.nunique()

查找数组的唯一元素。

返回数组的排序后的唯一元素。除独特元素外,还有三个可选输出:

  • 输入数组的索引,这些索引给出唯一值

  • 重建输入数组的唯一数组的索引

  • 输入数组中每个唯一值出现的次数

numpy.unique(arreturn_index = False,return_inverse = False,return_counts = False,axis = None )

参数

  • ar: array_like,输入数组。除非指定了轴,否则如果它不是一维的,它将被展平
  • return_index: bool,可选,如果为True,则还返回ar的索引(沿着指定的轴,如果提供的话,或者在展平的数组中),这将导致唯一的数组。返回是唯一值和对应的值首次出现的索引
  • return_inverse: bool,可选,如果为True,则还返回可用于重建ar的唯一数组的索引(对于指定的轴(如果提供))。返回的是唯一值和原数据排序后的索引值(如,原数据[1, 2, 6, 4, 2, 3, 2],现在[0, 1, 4, 3, 1, 2, 1])
  • return_counts :bool,可选,如果为True,则还返回每个唯一项出现在ar中的次数。1.9.0版中的新功能。
  • axis:int或无,可选,要运行的轴。如果为None,则ar将被展平。如果为整数,则由给定轴索引的子数组将被展平并视为具有给定轴尺寸的一维数组的元素,有关更多详细信息,请参见注释。如果使用轴 kwarg,则不支持对象数组或包含对象的结构化数组。默认为无。1.13.0版中的新功能。(0是选择唯一行,1是选择唯一列,相当是把行或者列作为一个整体)

返回

  • unique:ndarray,排序后的唯一值。
  • unique_indices: ndarray,可选,原始数组中唯一值的首次出现的索引。仅在return_index为True时提供。
  • unique_inverse: ndarray,可选,从唯一数组重建原始数组的索引。仅在return_inverse为True时提供。
  • unique_counts: ndarray,可选,每个唯一值出现在原始数组中的次数。仅在return_counts为True时提供。1.9.0版中的新功能。

例子

#一维
np.unique([1, 1, 2, 2, 3, 3])
#array([1, 2, 3])

#非一维
a = np.array([[1, 1], [2, 3]])
np.unique(a)
#array([1, 2, 3])

返回二维数组的唯一行

a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
np.unique(a, axis=0)
#array([[1, 0, 0], [2, 3, 4]])

返回给出唯一值的原始数组的索引

a = np.array(['a', 'b', 'b', 'c', 'a'])
u, indices = np.unique(a, return_index=True)
u
#array(['a', 'b', 'c'], dtype='<U1')
indices
#array([0, 1, 3])
a[indices]
#array(['a', 'b', 'c'], dtype='<U1')

从唯一值重建输入数组

a = np.array([1, 2, 6, 4, 2, 3, 2])
u, indices = np.unique(a, return_inverse=True)
u
#array([1, 2, 3, 4, 6])
indices
#array([0, 1, 4, 3, 1, 2, 1])
u[indices]
#array([1, 2, 6, 4, 2, 3, 2])

二、df.nunique()

计算行或者列的不同观察值。返回行或者列的唯一值。可以忽略NaN值

DataFrame.nunique(axis=0, dropna=True)

参数

axis:{0 or ‘index’, 1 or ‘columns’}, default 0,0是计算每个特征有多少个唯一值,1是计算每行有多少个唯一值

dropna:bool, default True,是否包括空值

例子

df = pd.DataFrame({'A': [1, 2, 3], 'B': [1, 1, 1]})
df.nunique()
'''
A    3
B    1
dtype: int64
'''
#########################
df.nunique(axis=1)
'''
0    1
1    2
2    2
dtype: int64
'''