如何在 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 数组中创建索引列?的主要内容,如果未能解决你的问题,请参考以下文章