从(行,列,值)数据创建Pandas DataFrame

时间:2017-05-24 14:51:43

标签: python pandas sparse-matrix

我有一个包含三列的Pandas Dataframe:row,column,value。行值都是低于某些N的整数,列值都是低于某些M的整数。这些值都是正整数。

我如何有效地创建包含i, j行和val列的Dataframe,如果(i, j , val)是一行,则索引0的值为N*M我原来的Dataframe,还有一些默认值(yourEditText.getText().toString(); )?此外,是否可以立即创建稀疏数据帧,因为数据已经很大,但R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]] R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]] R.aperture(7, [1, 2, 3, 4, 5]); //=> [] 仍然是我数据大小的10倍?

1 个答案:

答案 0 :(得分:1)

NumPy解决方案适合这里的性能 -

a = df.values
m,n = a[:,:2].max(0)+1
out = np.zeros((m,n),dtype=a.dtype)
out[a[:,0], a[:,1]] = a[:,2]
df_out = pd.DataFrame(out)

示例运行 -

In [58]: df
Out[58]: 
    row  col  val
0     7    1   30
1     3    3    0
2     4    8   30
3     5    8   18
4     1    3    6
5     1    6   48
6     0    2    6
7     4    7    6
8     5    0   48
9     8    1   48
10    3    2   12
11    6    8   18

In [59]: df_out
Out[59]: 
    0   1   2  3  4  5   6  7   8
0   0   0   6  0  0  0   0  0   0
1   0   0   0  6  0  0  48  0   0
2   0   0   0  0  0  0   0  0   0
3   0   0  12  0  0  0   0  0   0
4   0   0   0  0  0  0   0  6  30
5  48   0   0  0  0  0   0  0  18
6   0   0   0  0  0  0   0  0  18
7   0  30   0  0  0  0   0  0   0
8   0  48   0  0  0  0   0  0   0