首页 > 解决方案 > 如果第二个元素不是重复的,则删除 2d numpy 数组的行

问题描述

我有一个像这样的numpy数组:

a = [['I05', 'U13', 4],
     ['I12', 'U13', 5],
     ['I22', 'U13', 3],
     ['I03', 'U15', 5],
     ['I14', 'U23', 5],
     ['I12', 'U23', 2],
     ['I15', 'U43', 5]]

这里我们有两个 U13 条目和三个 U23 条目。所以我需要保留这些数组并删除其余的。

删除后我想要这样的结果:

a = [['I05', 'U13', 4],
     ['I12', 'U13', 5],
     ['I22', 'U13', 3],
     ['I14', 'U23', 5],
     ['I12', 'U23', 2]]

如何有效地做到这一点?

数组已经在第二列('UXX'值)上排序。

标签: pythonarraysnumpy

解决方案


此方法应实现所需的输出:

import numpy as np
from collections import Counter

a = np.array(a)
# count number of occurrences of each value in 2nd col
d = Counter(a[:,1])

# create index where counts > 1
index_keep = [i for i, j in enumerate(a[:,1]) if d[j] > 1]
>>> print(a[index_keep])
[['I05' 'U13' '4']
 ['I12' 'U13' '5']
 ['I22' 'U13' '3']
 ['I14' 'U23' '5']
 ['I12' 'U23' '2']]


推荐阅读