首页 > 后端开发 > Python教程 > NumPy 能否根据列的唯一值有效地对数据进行分组?

NumPy 能否根据列的唯一值有效地对数据进行分组?

DDD
发布: 2024-12-05 09:32:10
原创
749 人浏览过

Can NumPy Group Data Efficiently Based on a Column's Unique Values?

NumPy 可以按给定列对数据进行分组吗?

简介:

对数据进行分组是在许多数据分析场景中都是至关重要的操作。 NumPy是Python中一个强大的数值库,提供了各种操作数组的函数,但它缺乏专门的分组函数。本文演示了如何在 NumPy 中实现分组,而无需显式使用专用函数。

问题:

NumPy 中是否有一个函数可以按数组的大小对数组进行分组第一列,如提供的数组所示?

array([[ 1, 275],
       [ 1, 441],
       [ 1, 494],
       [ 1, 593],
       [ 2, 679],
       [ 2, 533],
       [ 2, 686],
       [ 3, 559],
       [ 3, 219],
       [ 3, 455],
       [ 4, 605],
       [ 4, 468],
       [ 4, 692],
       [ 4, 613]])
登录后复制

预期输出:

array([[[275, 441, 494, 593]],
       [[679, 533, 686]],
       [[559, 219, 455]],
       [[605, 468, 692, 613]]], dtype=object)
登录后复制

答案:

虽然 NumPy 没有明确提供“分组依据”函数,但它提供了一种受 Eelco Hoogendoorn 启发的替代方法图书馆。此方法依赖于数组的第一列始终递增的假设。如果不是这种情况,则需要按第一列对数组进行排序:

a = a[a[:, 0].argsort()]
登录后复制

使用增加第一列值的假设,以下代码执行分组操作:

np.split(a[:, 1], np.unique(a[:, 0], return_index=True)[1][1:])
登录后复制

此代码根据第一列中的唯一值有效地将数组元素分组为子数组。每个子数组代表一个组,包含具有相同第一列值的所有元素的第二列值。

其他注意事项:

  • 此方法的复杂度为 O (n log(n)) 由于排序操作。
  • 结果列表是 NumPy 数组,无需用于后续 NumPy 操作的转换操作。
  • 性能比较: 经验表明,对于较小的数据集,此方法比其他分组方法(包括 Pandas 和 defaultdicts)更快。

因此,NumPy 提供了一种灵活高效的方法,通过利用数组操作和排序函数来对数据进行分组,即使没有专用的分组功能。

以上是NumPy 能否根据列的唯一值有效地对数据进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板