根据数字对数组的行进行分组

Posted

技术标签:

【中文标题】根据数字对数组的行进行分组【英文标题】:Group the lines of an array based on a number 【发布时间】:2022-01-19 11:07:33 【问题描述】:

我有一个包含 100 行和 5 列的数组。我想将它们分组到单独的数组中,基于 在第 5 列中给出的数字上。第 5 列包含从 0 到 N (0, 1, 2, ...N) 的整数。

所以对于 N=2,第 5 列中的值将是 0、1、2

因此我想创建 3 个数组,其中行分别具有 0、1、2。

这里是 Python 中 N=3 的代码:

df_array_with_clusters=... 

for i in range(len(df_array_with_clusters)):

 if df_array_with_clusters[i, -1]== 0:

  cluster_0[i,:] = df_array_with_clusters[i, :-1]

 elif df_array_with_clusters[i, -1]== 1:
  cluster_1[i,:] = df_array_with_clusters[i, :-1]

 else:
  cluster_2[i,:] = df_array_with_clusters[i, :-1]

谢谢

【问题讨论】:

你问的问题太抽象了。您是否只是在寻找人类可读的算法?数组如何有 100 行和 5 列?它是数组数组还是多维数组?如果您正在寻求代码方面的帮助,使用什么语言? 对不起,我正在寻找 python 的代码。这是一个 numpy 数组。当我有 N=3 时我做了一些事情,所以第 5 列中的数字是 0,1,2。我将发布上面的代码!谢谢 我已添加标签以帮助潜在专家找到此问题。我希望你能找到你的答案。我不擅长python。 这个问题不是很清楚。您能否添加一个示例输入以及您期望从中得到什么输出? @NikolasSpiliopoulos 我已经编辑了答案以添加 NumPy 解决方案。如果我的回答解决了您的问题,请告诉我。 【参考方案1】:

使用列表的解决方案

这样的东西应该适合你:

def distribute_into_clusters(data, N):
    clusters=[[] for _ in range(N)]
    for row in data:
        cluster_id = row[-1]
        clusters[cluster_id].append(row[:-1])
    return clusters

返回的是一个簇列表,每个簇都是一个行列表,如 np.array。

如果您希望每个集群改为一个数组,请将 return 语句更改为:

    return [np.array(cluster) for cluster in clusters]

NumPy 解决方案

这是第二个解决方案,它在 NumPy 中将数据分布到集群中。可能效率更高。

def distribute_into_clusters(data, N):
    return [
        data[[row[-1] == cluster_id for row in data]][:,:-1]
        for cluster_id in range(N)
    ]
[row[-1] == cluster_id for row in data] 给了我一个布尔值列表,指示哪些行属于 cluster_iddata[...] 对数据进行切片,只保留 bool 为 True 的行 [:,:-1] 删除集群 ID 列

【讨论】:

您好,感谢您的回答!我会尽快看到,并再次通知您,谢谢! 您好,代码运行良好,但是我没有看到任何集群作为控制台变量的结果。由于我是 python 的初学者,我已将变量 N​​ 和数据(我自己的数组)放在 def 下方,但它似乎仍然没有做任何事情,谢谢! 保持我的函数如图所示(任一版本),并像这样调用它:clusters = distribute_into_clusters(df_array_with_clusters, 3)。然后print(clusters) 将打印所有簇,print(clusters[0])(将 0 更改为您要查看的簇的索引)将打印一个簇。 def 语法定义了一个函数,但在你调用它之前它不会运行。

以上是关于根据数字对数组的行进行分组的主要内容,如果未能解决你的问题,请参考以下文章

根据 pandas 中的字典对数据帧的行进行分组并对相应的分子求和

根据 3 到 4 个条件对数据库表中的行进行计数和分组查询

如何根据相同的值对数组进行分组

如何使用 MongoDB 根据数组元素对记录进行分组

根据php中的键对数组值进行分组?

根据包含数字和不包含数字的行对 CSV 中的行进行排序