Python--unique()与 nunique() 函数 1 unique()

统计 list 中的不同值时,返回的是 array. 它有三个参数,可分别统计不同的量,返回的都是 array.

当 list 中的元素也是 list 时,尽量不要用这种方法.

|

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

|

import numpy as np

a ``= [``1``,``5``,``4``,``2``,``3``,``3``,``5``]

# 返回一个array

print``(np.unique(a))

# [1 2 3 4 5]

# 返回该元素在list中第一次出现的索引

print``(np.unique(a,return_index``=``True``))

# (array([1, 2, 3, 4, 5]), array([0, 3, 4, 2, 1]))

# 返回原list中每个元素在新的list中对应的索引

print``(np.unique(a,return_inverse``=``True``))

# (array([1, 2, 3, 4, 5]), array([0, 4, 3, 1, 2, 2, 4]))

# 返回该元素在list中出现的次数

print``(np.unique(a,return_counts``=``True``))

# (array([1, 2, 3, 4, 5]), array([1, 1, 2, 1, 2]))

# 当加参数时,unique()返回的是一个tuple,这里利用了tuple的性质,即有多少个元素即可赋值给对应的多少个变量

p,q,m,n ``= np.unique(a,return_index``=``True``,return_inverse``=``True``,return_counts``=``True``)

print``(p,q,m,n)

# [1 2 3 4 5] [0 3 4 2 1] [0 4 3 1 2 2 4] [1 1 2 1 2]

# 注意当list中的元素不是数字而是list的时候,输出的数据类型与list中元素的长度有关

# 利用这种方法对list中元素去重或求里面元素的个数都不是好方法,很容易出错 

|

统计 series 中的不同值时,返回的是 array,它没有其它参数

|

1

2

3

4

|

import pandas as pd

se ``= pd.Series([``1``,``3``,``4``,``5``,``2``,``2``,``3``])

print``(se.unique())

# [1 3 4 5 2]

|

2.nunique()

可直接统计 dataframe 中每列的不同值的个数, 也可用于 series, 但不能用于 list. 返回的是不同值的个数.

|

1

2

3

4

5

6

7

8

9

10

|

df``=``pd.DataFrame({``'A'``:[``0``,``1``,``1``],``'B'``:[``0``,``5``,``6``]})

print``(df)

print``(df.nunique())

#    A  B

# 0  0  0

# 1  1  5

# 2  1  6

# A    2

# B    3

# dtype: int64

|

也可与 groupby 结合使用, 统计每个块的不同值的个数.

|

1

2

3

4

5

6

7

|

all_user_repay ``= all_user_repay.groupby([``'user_id'``])[``'listing_id'``].agg([``'nunique'``]).reset_index()

#    user_id  nunique

# 0       40        1

# 1       56        1

# 2       98        1

# 3      103        1

# 4      122        1

|