Pandas 如何在2d矩阵中输入数据框列的值?
我有一个熊猫数据框,有3列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
值
,行索引
,列索引
。我想创建一个矩阵,其中放置在相关行和列以及未知元素的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.]])