首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中对2d数组中的连续数据进行分组

如何在python中对2d数组中的连续数据进行分组
EN

Stack Overflow用户
提问于 2022-03-18 22:05:42
回答 1查看 280关注 0票数 1

我有一个2d NumPy数组,如下所示:

代码语言:javascript
复制
array([[1, 1],
       [1, 2],
       [2, 1],
       [2, 2],
       [3, 1],
       [5, 1],
       [5, 2]])

我想对它进行分组,并有一个类似于这样的输出:

代码语言:javascript
复制
         Col1 Col2
group 1: 1-2, 1-2
group 2: 3-3, 1-1
group 3: 5-5, 1-2

如果列是连续的,我希望根据它们对列进行分组。

因此,对于第1列中的唯一值,如果数据在行之间是连续的,则将第二列中的数据分组。现在,对于第2列的唯一分组,如果第1列在行之间是连续的,则将其分组。

结果可以看作是网格的角点。在上面的例子中,组1是正方形网格,组2是点,组3是平面线。

我的系统不允许我使用熊猫,所以我不能在那个库中使用group_by,但我可以使用其他标准库。

任何帮助都是非常感谢的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-18 23:07:10

给你..。

步骤如下:

用排序顺序( preserved.

  • Build )获取唯一列1值的列表( list xUnique )--窗体[col1_value, [col2_min, col2_max]]中包含列1值范围为2的项的列表xRanges

  • 构建表单[[col1_min, col1_max], [col2_min, col2_max]]项的列表xGroups,其中[col1_min, col1_max]部分是通过合并col1_value中的连续项的一部分来创建的,如果它们相差1,并且具有相同的[col2_min, col2_max]列2的值范围。H 215H 116D17的每一项中的范围转到xGroups。转换成字符串并使用所需的行和列headings.

  • Also包打印,并以numpy.array形式打印以与输入的形式相匹配.

代码语言:javascript
复制
import numpy as np
data = np.array([
    [1, 1],
    [1, 2],    
    [2, 1],    
    [2, 2],
    [3, 1],
    [5, 1],
    [5, 2]])
xUnique = list({pair[0] for pair in data})
xRanges = list(zip(xUnique, [[0, 0] for _ in range(len(xUnique))]))
rows, cols = data.shape
iRange = -1
for i in range(rows):
    if i == 0 or data[i, 0] > data[i - 1, 0]:
        iRange += 1
        xRanges[iRange][1][0] = data[i, 1]
    xRanges[iRange][1][1] = data[i, 1]
xGroups = []
for i in range(len(xRanges)):
    if i and xRanges[i][0] - xRanges[i - 1][0] == 1 and xRanges[i][1] == xRanges[i - 1][1]:
        xGroups[-1][0][1] = xRanges[i][0]
    else:
        xGroups += [[[xRanges[i][0], xRanges[i][0]], xRanges[i][1]]]

xGroupStrs = [ [f'{a}-{b}' for a, b in row] for row in xGroups]

groupArray = np.array(xGroupStrs)
print(groupArray)

print()
print(f'{"":<10}{"Col1":<8}{"Col2":<8}')
[print(f'{"group " + str(i) + ":":<10}{col1:<8}{col2:<8}') for i, (col1, col2) in enumerate(xGroupStrs)]

输出:

代码语言:javascript
复制
[['1-2' '1-2']
 ['3-3' '1-1']
 ['5-5' '1-2']]

          Col1    Col2
group 0:  1-2     1-2
group 1:  3-3     1-1
group 2:  5-5     1-2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71533641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档