Python 使数组按列唯一的有效方法

Python 使数组按列唯一的有效方法,python,arrays,numpy,unique,Python,Arrays,Numpy,Unique,假设我们有一个二维数组,如下所示: array1 = np.array([[1,4,3, 64356,5435,434], [11,46,3, 7356,585,74], [51,406,3, 769,5435,24], [12,45,5, 656,135,134], [112,475,5, 656,1385,134],

假设我们有一个二维数组,如下所示:

array1 = np.array([[1,4,3, 64356,5435,434],
                   [11,46,3, 7356,585,74],
                   [51,406,3, 769,5435,24],
                   [12,45,5, 656,135,134],
                   [112,475,5, 656,1385,134],
                   [13,46,  5, 656,1385,19]])
第4行和第5行在术语或它们的2,3,4列方面不是唯一的,我们希望删除其中一个。
是否有一种有效的方法可以删除数组的行,并使其行在所选列中唯一?

纯numpy的解决方案:

_, idx = np.unique(array1[:,[2,3,4]], axis=0, return_index=True)
array1[sorted(idx)]
输出:

array([[    1,     4,     3, 64356,  5435,   434],
       [   11,    46,     3,  7356,   585,    74],
       [   51,   406,     3,   769,  5435,    24],
       [   12,    45,     5,   656,   135,   134],
       [  112,   475,     5,   656,  1385,   134]])
     0    1  2      3     4    5
0    1    4  3  64356  5435  434
1   11   46  3   7356   585   74
2   51  406  3    769  5435   24
3   12   45  5    656   135  134
4  112  475  5    656  1385  134
5   13   46  5    656  1385   19

    0    1  2      3     4    5
0   1    4  3  64356  5435  434
1  11   46  3   7356   585   74
2  51  406  3    769  5435   24
3  12   45  5    656   135  134

[[    1     4     3 64356  5435   434]
 [   11    46     3  7356   585    74]
 [   51   406     3   769  5435    24]
 [   12    45     5   656   135   134]]

纯numpy的解决方案:

_, idx = np.unique(array1[:,[2,3,4]], axis=0, return_index=True)
array1[sorted(idx)]
输出:

array([[    1,     4,     3, 64356,  5435,   434],
       [   11,    46,     3,  7356,   585,    74],
       [   51,   406,     3,   769,  5435,    24],
       [   12,    45,     5,   656,   135,   134],
       [  112,   475,     5,   656,  1385,   134]])
     0    1  2      3     4    5
0    1    4  3  64356  5435  434
1   11   46  3   7356   585   74
2   51  406  3    769  5435   24
3   12   45  5    656   135  134
4  112  475  5    656  1385  134
5   13   46  5    656  1385   19

    0    1  2      3     4    5
0   1    4  3  64356  5435  434
1  11   46  3   7356   585   74
2  51  406  3    769  5435   24
3  12   45  5    656   135  134

[[    1     4     3 64356  5435   434]
 [   11    46     3  7356   585    74]
 [   51   406     3   769  5435    24]
 [   12    45     5   656   135   134]]

按照S.Mohsen的建议,转换成熊猫并返回

代码:

输出:

array([[    1,     4,     3, 64356,  5435,   434],
       [   11,    46,     3,  7356,   585,    74],
       [   51,   406,     3,   769,  5435,    24],
       [   12,    45,     5,   656,   135,   134],
       [  112,   475,     5,   656,  1385,   134]])
     0    1  2      3     4    5
0    1    4  3  64356  5435  434
1   11   46  3   7356   585   74
2   51  406  3    769  5435   24
3   12   45  5    656   135  134
4  112  475  5    656  1385  134
5   13   46  5    656  1385   19

    0    1  2      3     4    5
0   1    4  3  64356  5435  434
1  11   46  3   7356   585   74
2  51  406  3    769  5435   24
3  12   45  5    656   135  134

[[    1     4     3 64356  5435   434]
 [   11    46     3  7356   585    74]
 [   51   406     3   769  5435    24]
 [   12    45     5   656   135   134]]

按照S.Mohsen的建议,转换成熊猫并返回

代码:

输出:

array([[    1,     4,     3, 64356,  5435,   434],
       [   11,    46,     3,  7356,   585,    74],
       [   51,   406,     3,   769,  5435,    24],
       [   12,    45,     5,   656,   135,   134],
       [  112,   475,     5,   656,  1385,   134]])
     0    1  2      3     4    5
0    1    4  3  64356  5435  434
1   11   46  3   7356   585   74
2   51  406  3    769  5435   24
3   12   45  5    656   135  134
4  112  475  5    656  1385  134
5   13   46  5    656  1385   19

    0    1  2      3     4    5
0   1    4  3  64356  5435  434
1  11   46  3   7356   585   74
2  51  406  3    769  5435   24
3  12   45  5    656   135  134

[[    1     4     3 64356  5435   434]
 [   11    46     3  7356   585    74]
 [   51   406     3   769  5435    24]
 [   12    45     5   656   135   134]]

@QuangHoang可能重复,但不允许按列进行选择性。在array1[:,您的_select_column]上工作并获取索引?如果可以使用pandas。您可以将数组转换为dataframe并使用drop_duplicates函数,该函数接受用于选择ColumnsD.DataFramearray1.drop_duplicates您的选择列?可能重复@QuangHoang,但不允许按列进行选择性。在array1[:,您的选择列]上工作如果使用熊猫是一种选择,那么获取索引。您可以将数组转换为数据帧,并使用drop_duplicates函数,该函数接受用于选择columnspd.DataFramearray1.drop_duplicates列的子集参数?