【问题标题】:ordering and concatinating two arrays based on one column elements基于一列元素对两个数组进行排序和连接
【发布时间】:2014-08-13 16:17:40
【问题描述】:

我有一大堆数据,形状为(24000, 5)。我将此数组作为代码的输入,但代码改组并更改了第四列,只有最后一列完好无损。我可以在最后一列中找到相似元素并将生成列中的对应行与旧列粘贴并创建一个新数组的最快方法是什么?

例如,输入数组如下所示:

25.463 -10.249 -0.211  0.912 0.432
24.910 -09.089  0.722 -0.304 0.391
25.719 -10.522 -0.639 -0.002 0.638
24.022 -10.098  0.028 -0.007 1.921

输出数组类似于:

230.1 321.9 -0.311 -0.010 1.921
349.6 301.2  0.740 -0.309 0.391
189.9 321.9 -0.220  0.920 0.432
259.4 292.8 -0.641  0.000 0.638

最终结果应该是这样的:

25.463 -10.249 -0.211  0.912 189.9 321.9 -0.220  0.920 0.432
24.910 -09.089  0.722 -0.304 349.6 301.2  0.740 -0.309 0.391
25.719 -10.522 -0.639 -0.002 259.4 292.8 -0.641  0.000 0.638
24.022 -10.098  0.028 -0.007 230.1 321.9 -0.311 -0.010 1.921

【问题讨论】:

  • 你使用了 pandas 标签...所以如果这些是 pandas 数据框,只需将每个数据集的最后一列作为键进行标准合并。只需确保键是唯一的(并且具有相同的 dtype!),否则创建一个。在这里合并浮动并不理想,但可能没问题,只需检查最后是否得到一对一的合并。
  • @SaulloCastro 好吧,我想要一对一的对应关系,我认为列中数字的精度足以满足这个条件!

标签: python arrays numpy pandas multidimensional-array


【解决方案1】:

您可以使用numpy.argsort() 对两个数组的最后一列进行排序,然后使用numpy.hstack() 将它们组合起来。

orig_order 用于将连接后的数组返回到原来的顺序...

import numpy as np

as1 = np.argsort(a1[:,-1])
orig_order = np.argsort(as1)
as2 = np.argsort(a2[:,-1])

ans = np.hstack((a1[as1][:,:-1], a2[as2]))[orig_order]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多