如何在 NumPy 数组中创建索引列?

Posted

技术标签:

【中文标题】如何在 NumPy 数组中创建索引列?【英文标题】:How to make an index column in NumPy array? 【发布时间】:2021-12-18 22:02:48 【问题描述】:

我知道,这似乎是一个容易回答的问题,但是,我只是纠结于是否有办法做到这一点。

我有一个 DataFrame(带索引),我在该框架中插入了一个新列,该列能够每 10 行分组一次,并且每个组的数字从 1 到 ...。我使用了这个非常基本的代码,并且成功了!

df1.insert(0, 'Data', (df.index // 10) + 1)

问题是;现在,我有一个不包含索引的 NumPy 数组(unit8),这就是为什么上面的代码不适用于相同的条件。我想做同样的事情,代码将每 10 行计数一次,将它们分组,并在新添加的列中为每个组添加一个数字。

【问题讨论】:

这需要minimal reproducible example。您显示的唯一代码是熊猫操作。数组在哪里?我不知道您所说的数组中的“索引列”是什么意思。 numpy 数组没有索引...完全不清楚您要完成什么。如果你给出具体的例子会有所帮助。 【参考方案1】:

我不确定我是否理解您的问题(也许您可以举一个您正在使用的代码示例)。 无论如何,我认为一个可能的解决方案可能是将您的数组转换为只有一列的 Dataframe(现在您有了索引),然后应用您的公式:

import pandas as pd
import numpy as np
arr = np.random.normal(size = 100) # just a random array
df = pd.DataFrame(arr, columns = ['arr'])
print(df)

您将获得:

        arr
0  -0.834342
1   2.156343
2  -0.527963
3  -0.311767
4   1.029866
..       ...
95  0.047856
96 -1.009195
97 -0.239678
98  0.393085
99 -1.277784

【讨论】:

【参考方案2】:

使用np.repeat:

m = np.arange(1, 24)

n = np.repeat(np.arange(1, np.ceil(len(m) / 10) + 1), 10)[:len(m)]

输出:

>>> np.vstack([n, m]).T
array([[ 1.,  1.],
       [ 1.,  2.],
       [ 1.,  3.],
       [ 1.,  4.],
       [ 1.,  5.],
       [ 1.,  6.],
       [ 1.,  7.],
       [ 1.,  8.],
       [ 1.,  9.],
       [ 1., 10.],
       [ 2., 11.],
       [ 2., 12.],
       [ 2., 13.],
       [ 2., 14.],
       [ 2., 15.],
       [ 2., 16.],
       [ 2., 17.],
       [ 2., 18.],
       [ 2., 19.],
       [ 2., 20.],
       [ 3., 21.],
       [ 3., 22.],
       [ 3., 23.]])

【讨论】:

【参考方案3】:

因此,如果我正确理解了您的问题,那么您必须将 acolumn 添加到您的(大概)一维数组中。

import numpy as np
array = np.random.randint(0, 100,size=100) # random numpy array (1D)
index = np.arange(array.shape[0]) # create index array for indexing
array_with_indices = np.c_[array, index]
array_with indices[:, 1] // 10 + 1 # taking second column as it contains the indices
# or we can convert it to a dataframe if you prefer
df = pd.DataFrame(array, index = index)
# then it should work perfectly
df.index//10 + 1

然后就可以插入df1了。

【讨论】:

非常感谢,它成功了!我很感激……

以上是关于如何在 NumPy 数组中创建索引列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中创建索引从 1 开始的一维数组

如何在 NumPy 中创建一个空数组/矩阵?

numpy数组中的轴索引如何?

在JavaScript中创建数组并用索引加一填充[重复]

如何在java中的每个arraylist中创建具有不同类型对象的arraylist数组?

如何在 SQL Server 中创建聚集索引,同时仍保留主键?