Python 如果第二个元素不是重复的,则删除2d numpy数组的行
我有一个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
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阵列。