计算NP.Where()阵列Python中的项目数



我当前正在尝试比较熊猫dataframe中的两个列:

--------------- Cluster Assignment ---------------
           ID      Class   Cluster
    0   1000025      2        4
    1   1002945      2        2
    2   1015425      2        4
    3   1016277      2        2
    4   1017023      2        4
    5   1017122      4        2
    6   1018099      2        4
    7   1018561      2        4
    8   1033078      2        4
    9   1033078      2        4
    10  1035283      2        4
    11  1036172      2        4
    12  1041801      4        4
    13  1043999      2        4
    14  1044572      4        2
    15  1047630      4        4
    16  1048672      2        4
    17  1049815      2        4
    18  1050670      4        2
    19  1050718      2        4

试图找到与我的数据框中找到错误比率不匹配的行数(完整的DF比这更长(。我正在使用 np.where()进行比较,并且我得到了所有不正确行的准确输出,但是现在我想添加多少行是错误的,然后除以行总数。现在的问题是我得到了:

>>> data= np.where(df7['Class']!=df7['Cluster'])
>>> print(len(data))
1

如果我打印了Datai的类型GET < class 'tuple' >。因此,我尝试使用以下方式从元组转换为列表:

>>> print(list(data))
[array([  9,  11,  17,  31,  32,  33,  34,  36,  38,  62,  64,  65, 135,
   156, 196, 201, 277, 301], dtype=int64)]

显然,这无济于事,因为如果我尝试打印/存储该列表的长度,我会得到

>>> print(list(data))
[array([  9,  29,  30,  31,  33,  35,  59,  61,  62, 132, 153, 193, 198,
   274, 298], dtype=int64)]
>>> print('errors: ', len(cluster2wrong))
errors:  1

有人可以将我指向我如何计算这些项目的方向吗?

np.where的结果是包含n数组的tuple,其中n是您数组中的尺寸的数量。好的新事物是,这些n阵列中的每个阵列的长度相同(每个都代表每个发现的项目一个"索引"(,因此您可以使用其中任何一个的长度:

>>> len(data[0])  # or len(data[i]) where i < dimensions of your df7

如评论中已经提到的。但是,如果您只想知道有多少项目满足条件,则可以使用np.count_nonzero

>>> a = np.array([2,3,4,5])
>>> b = np.array([3,3,3,3])
>>> np.count_nonzero(a != b)
3

最新更新