python numpy 重复_python中numpy的数组按行统计重复行(原创,转载请注明)

在一次数据处理中遇到一个问题,需要按行统计numpy的数组中有多少重复行举3,58,2例如下:

有一数组[[1,2,3,4],[1,2,3,4],[3,5,9,3],[7,8,10,11],[1,2,3,4],[4,3,2,1],[7,8,10,11]]

要得到的结果是:{(1,2,3,4):3,(3,5,9,3):1,(7,8,10,11):2,(4,3,2,1):1}

处理过程如下:

import numpy as np

aa=np.array([[1,2,3,4],[1,2,3,4],[3,5,9,3],[7,8,10,11],[1,2,3,4],[4,3,2,1],[7,8,10,11]])

bb=list([tuple(t) for t in aa])

print(bb)

#这里的输出结果是:

#[(1, 2, 3, 4), (1, 2, 3, 4), (3, 5, 9, 3), (7, 8, 10, 11), (1, 2, 3, 4), (4, 3, 2, 1), (7, 8, 10, 11)]

aa1= dict((aaa, bb.count(aaa)) for aaa in bb)

print(aa1)

#这里的输出结果是:

#{(1, 2, 3, 4): 3, (3, 5, 9, 3): 1, (7, 8, 10, 11): 2, (4, 3, 2, 1): 1}

#下面是字典转列表

key=aa1.keys()

value=aa1.values()

print(key)

print(value)

alist=list(zip(key,value))

print(alist)

#输出结果如下:

#dict_keys([(1, 2, 3, 4), (3, 5, 9, 3), (7, 8, 10, 11), (4, 3, 2, 1)])

#dict_values([3, 1, 2, 1])

#[((1, 2, 3, 4), 3), ((3, 5, 9, 3), 1), ((7, 8, 10, 11), 2), ((4, 3, 2, 1), 1)]