Pandas 如何在2d矩阵中输入数据框列的值?

Pandas 如何在2d矩阵中输入数据框列的值?,pandas,numpy,matrix,dataframe,Pandas,Numpy,Matrix,Dataframe,我有一个熊猫数据框,有3列值,行索引,列索引。我想创建一个矩阵,其中放置在相关行和列以及未知元素的dataframe值为零 我做了一个类似这样的循环: N_rows = df.row_index.max() N_cols = df.column_index.max() A = np.zeros((N_rows, N_cols)) for i in df.row_index: for j in df.column_index: np.put(A, i*N_cols+j, d

我有一个熊猫数据框,有3列
行索引
列索引
。我想创建一个矩阵,其中放置在相关行和列以及未知元素的dataframe值为零

我做了一个类似这样的循环:

N_rows = df.row_index.max()
N_cols = df.column_index.max()
A = np.zeros((N_rows, N_cols))
for i in df.row_index:
    for j in df.column_index:
        np.put(A, i*N_cols+j, df['value'][(df.row_index==i) & 
                                          (df.column_index==j)])
但是它工作得很慢

如何才能更快地执行此操作?

我认为您需要对列和行的缺失值进行添加,最后是numpy array添加:

另一个解决方案包括和:


只是修改了@jezrael解决方案中的一小部分。实际上,您可以使用Pandas
as_matrix()
函数来获取数组:

df = pd.DataFrame({'value':[2,4,5],
                   'row_index':[2,3,4],
                   'col_index':[0,2,3]})

df.pivot('row_index', 'col_index', 'value').fillna(0).as_matrix()
# array([[ 2.,  0.,  0.],
#        [ 0.,  4.,  0.],
#        [ 0.,  0.,  5.]])
尝试
array=df.fillna(0)。值
print (df.set_index(['row_index', 'col_index'])['value']
         .unstack(fill_value=0)
         .reindex(index=rows, columns=cols, fill_value=0))

col_index  0  1  2  3
row_index            
0          0  0  0  0
1          0  0  0  0
2          2  0  0  0
3          0  0  4  0
4          0  0  0  5


a = df.set_index(['row_index', 'col_index'])['value']
      .unstack(fill_value=0)
      .reindex(index=rows, columns=cols, fill_value=0)
      .values
print (a)
 [[0 0 0 0]
 [0 0 0 0]
 [2 0 0 0]
 [0 0 4 0]
 [0 0 0 5]]
df = pd.DataFrame({'value':[2,4,5],
                   'row_index':[2,3,4],
                   'col_index':[0,2,3]})

df.pivot('row_index', 'col_index', 'value').fillna(0).as_matrix()
# array([[ 2.,  0.,  0.],
#        [ 0.,  4.,  0.],
#        [ 0.,  0.,  5.]])