【问题标题】:Create Pandas DataFrame from (row, column, value) data从(行、列、值)数据创建 Pandas DataFrame
【发布时间】:2017-05-24 23:03:29
【问题描述】:
我有一个包含三列的 Pandas 数据框:行、列、值。行值都是N以下的整数,列值都是M以下的整数。这些值都是正整数。
如何有效地创建具有N 行和M 列的数据框,如果(i, j , val) 是我原始数据框中的一行,则在索引i, j 处具有值val,以及一些默认值(@ 987654328@) 否则?此外,是否可以立即创建一个 sparse Dataframe,因为数据已经非常大了,但 N*M 仍然是我数据大小的 10 倍左右?
【问题讨论】:
标签:
python
pandas
sparse-matrix
【解决方案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