【问题标题】:Python - How to split an array based on the first column?Python - 如何根据第一列拆分数组?
【发布时间】:2019-10-04 02:27:28
【问题描述】:

我有以下虚假数据。将其读入数组后,它将具有形状 (8, 3)。现在我想根据第一列(ID)拆分数据并返回一个数组列表,其形状为:[(3,3),(2,3),(3,3)]。我认为 np.split 可以通过将一维数组分配给“indices_or_sections”参数来完成这项工作。但是有没有更方便的方法呢?

1   700 35
1   700 35
1   700 35
2   680 25
2   680 25
3   750 40
3   750 40
3   750 40

【问题讨论】:

  • 你对非 numpy 解决方案持开放态度吗?
  • 如果第一列的值是连续的?
  • np.split(a,np.flatnonzero(np.diff(a[:,0]))+1) 非常方便。
  • NumPy 数组通常包含相同类型的数据,并且都测量相同的事物。它看起来很像 pandas 会帮助你,因为它明确设计用于处理这样的列数据。

标签: python arrays numpy split reshape


【解决方案1】:

您可以通过使用np.splitsortnp.uniquenp.cumsum 的组合来实现此目的。

>>> a = [[1, 700, 35],
...      [1, 700, 35],
...      [1, 700, 35],
...      [2, 680, 25],
...      [2, 680, 25],
...      [3, 750, 40],
...      [3, 750, 40],
...      [3, 750, 40]]
>>> a = np.array(a)
>>> # sort the array by first column. 
>>> a = a[a[:,0].argsort()]
>>> np.split(a, np.cumsum(np.unique(a[:, 0], return_counts=True)[1])[:-1])
[array([[  1, 700,  35],
       [  1, 700,  35],
       [  1, 700,  35]]), array([[  2, 680,  25],
       [  2, 680,  25]]), array([[  3, 750,  40],
       [  3, 750,  40],
       [  3, 750,  40]])]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2022-01-22
    • 2022-10-30
    相关资源
    最近更新 更多