Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定索引矩阵和原始数据,如何快速重建新的数据帧_Python - Fatal编程技术网

Python 给定索引矩阵和原始数据,如何快速重建新的数据帧

Python 给定索引矩阵和原始数据,如何快速重建新的数据帧,python,Python,我有一个数据框和一个对应于该数据框的索引表。要创建新的数据帧,是否有其他方法重建新数据。索引表中的行索引实际上是行号,因此在python意义上,实际的行索引=行号-1 # simulate index table col_index=np.random.choice([0,1], 5, p=[0.4, 0.6]) row_index=np.random.choice([3,1,2],5, p=[0.4, 0.5,0.1]) ind=np.vstack((row_i

我有一个数据框和一个对应于该数据框的索引表。要创建新的数据帧,是否有其他方法重建新数据。索引表中的行索引实际上是行号,因此在python意义上,实际的行索引=行号-1

    # simulate index table
    col_index=np.random.choice([0,1], 5, p=[0.4, 0.6])
    row_index=np.random.choice([3,1,2],5, p=[0.4, 0.5,0.1])
    ind=np.vstack((row_index,col_index))
    ind=ind.T

    array([[3, 0],
   [3, 1],
   [2, 1],
   [1, 1],
   [1, 0]])

    dt=np.random.random((5, 2)) #simulated data

    array([[ 0.3592,  0.4983],
       [ 0.0518,  0.2291],
       [ 0.4322,  0.5654],
       [ 0.8482,  0.1722],
       [ 0.1448,  0.5766]])

    # My code
    newDt=np.zeros([5,1])
    for j in range(5):
        row=ind[j,0]
        col=ind[j,1]
        newDt[j]=dt[row-1,col]

    #output
    array([[ 0.4322],
       [ 0.5654],
       [ 0.2291],
       [ 0.4983],
       [ 0.3592]])

假设您有一些值,
vals
,以及一些索引,
ind

>>> vals
array([[ 0.3592,  0.4983],
       [ 0.0518,  0.2291],
       [ 0.4322,  0.5654],
       [ 0.8482,  0.1722],
       [ 0.1448,  0.5766]])
>>> ind
array([[3, 0],
       [3, 1],
       [2, 1],
       [1, 1],
       [1, 0]])
获取所需内容的最简单方法是使用多维索引:

>>> vals[ind[:,0] - 1, ind[:,1]]
array([ 0.4322,  0.5654,  0.2291,  0.4983,  0.3592])
如果,正如您的问题所暗示的,您的值位于
pd.DataFrame
中,那么您可以访问
values
属性来处理底层
np.array

>>> df
        0       1
0  0.3592  0.4983
1  0.0518  0.2291
2  0.4322  0.5654
3  0.8482  0.1722
4  0.1448  0.5766
>>> df.values[ind[:,0] - 1, ind[:,1]]
array([ 0.4322,  0.5654,  0.2291,  0.4983,  0.3592])

.... 什么你说你想要一个数据帧,但你的输出是一个数组…。@juanpa.arrivillaga,我的意思是我需要一系列与索引表对应的值。可以将其视为查找表并记录每个值。如果“表”不止三个维度,而要作为索引的“数据”也不止三个维度,该怎么办?有没有一种方法可以在没有循环的情况下表达三维以上的数据?@alphabetagama它应该在更高的维度上使用相同的方法。我不确定我是否理解你的评论。例如,对于一个动态规划问题,您可能有不止一个状态变量,对于每个状态变量,您都有一个关联的值表,该表只是一个平面,如果您有一个三维空间或更高的空间,该怎么办dimensions@alphabetagamma什么这听起来似乎与你的问题无关。你为什么不问你实际上想回答的问题呢。请使用标准术语。您一直在使用诸如“dataframe”和“table”之类的术语,但您可能只是指“array”。我不知道,因为你一直不稳定。在任何情况下,索引到高维数组的工作原理与我在这个答案中所展示的完全相同。