使用第一列对行数组进行排序以匹配另一个数组的顺序

时间:2018-09-20 14:41:12

标签: python arrays numpy

我有两个数据数组,数组A有4列,大约59,000行,数组B有24列,大约45,000行。数组A的前3列与数组B的前3列具有相同的数据,但顺序不同。我想使用第一列按数组B重新排列数组A的每一行。我正在寻找答案,但仅适用于长度相同的数组。对于长度不相同的数组,我找不到任何答案。

我确实找到了一个答案here,但我不断收到错误消息:“数组的索引过多”。该错误将出现在答案sidx = A[:,0].argsort()的第一行,我不确定该如何解决。

我不确定这是否有用,但是两个数组的第一列都是整数。其他一切都是花车。如果对于该错误有某种解决方案,或者对于我所遇到的问题有另一种解决方案,那么将不胜感激!

这也是两个数组的外观。

In: arrayA
Out: array([(8846,  73.00, 57.56, 1.),
   (4814, 347.21, 56.61, 0.),
   (2779,  72.14 , 57.34, 0.),
   (1439,  30.24, 64.81, 1.),
   (3677,  85.50, 31.85, 1.),
   (9777, 199.95, 50.46, 1.)])
In: arrayB
Out: array([(2779,  72.14 , 57.34, 17.165, 0.005, 1.329, 19.745, 0.031),
   (9777, 199.95, 50.46, 15.19, 0.002, 0.019, 19.193, 0.023),
   (8846, 73.00, 57.56, 14.21, 0.002, 1.754, 16.918, 0.007),
   (3677, 85.50, 31.85, 20.1, 0.073, 2.394, 23.976, 1.091, 4.441)])

我希望最终产品是数组A的排序版本,以便A的每个索引与数组B的每个索引匹配

In: arrayA_sorted
Out: array([(2779,  72.14 , 57.34, 0.),
   (9777, 199.95, 50.46, 1.),
   (8846, 73.00, 57.56, 1.),
   (3677,  85.50, 31.85, 1.),
   (4814, 347.21, 56.61, 0.),
   (1439,  30.24, 64.81, 1.)])

在这里,arrayA_sorted的索引0到3的前三列与数组B的前三列匹配。多余的两行没有被触及,因为它们无法匹配任何内容,并留在了数组的底部。数组。

0 个答案:

没有答案