Python 如果第二个元素不是重复的,则删除2d numpy数组的行

Python 如果第二个元素不是重复的,则删除2d numpy数组的行,python,arrays,numpy,Python,Arrays,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 = [['I

我有一个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'

对于混合类型,熊猫是一个方便的选择。由于数据已排序,您只需保留重复项:

import pandas as pd
import numpy as np

A = np.array([('I05', 'U13', 4),
              ('I12', 'U13', 5),
              ('I22', 'U13', 3),
              ('I03', 'U15', 5),
              ('I14', 'U23', 5),
              ('I12', 'U23', 2),
              ('I15', 'U43', 5)],
            dtype='object, object, i4')

df = pd.DataFrame(A)
B = df[df.duplicated(subset=['f1'], keep=False)].values

print(B)

array([['I05', 'U13', 4],
       ['I12', 'U13', 5],
       ['I22', 'U13', 3],
       ['I14', 'U23', 5],
       ['I12', 'U23', 2]], dtype=object)
注意NumPy会自动添加名称。这是一个结构化数组,不是元组数组:

print(A)

array([('I05', 'U13', 4), ('I12', 'U13', 5), ('I22', 'U13', 3),
       ('I03', 'U15', 5), ('I14', 'U23', 5), ('I12', 'U23', 2),
       ('I15', 'U43', 5)], 
      dtype=[('f0', 'O'), ('f1', 'O'), ('f2', '<i4')])
打印(A)
数组([('I05','U13',4),('I12','U13',5),('I22','U13',3),
(I03,U15,5),(I14,U23,5),(I12,U23,2),,
('I15','U43',5)],

dtype=[('f0','O'),('f1','O'),('f2','p>此方法应实现所需的输出:

将numpy导入为np
从收款进口柜台
a=np.数组(a)
#计算第二列中每个值的出现次数
d=计数器(a[:,1])
#创建计数大于1的索引
如果d[j]>1,则在枚举(a[:,1])中索引_keep=[i代表i,j]
打印(一个[索引保存]) [I05''U13''4'] [I12''U13''5'] ['I22''U13''3'] ['I14''U23''5'] ['I12''U23''2']]
f1是做什么的?你能详细说明一下吗?另外,我有一个数组数组,不是元组数组。它能在那里工作吗?@PreetomSahaArko,请参阅更新,NumPy自动添加名称。这些名称输入熊猫。@PreetomSahaArko,还请注意,
A
不是元组数组,它是结构化数组。你可以轻松地转换为stru通过上述逻辑实现ctured阵列。