在一次数据处理中遇到一个问题,需要按行统计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)]