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列的子集参数?