从(行、列、值)数据创建 Pandas DataFrame
Create Pandas DataFrame from (row, column, value) data
我有一个包含三列的 Pandas 数据框:行、列、值。行值都是 N
以下的整数,列值都是 M
以下的整数。取值均为正整数。
如何高效地创建一个包含 N
行和 M
列的 Dataframe,如果 (i, j , val)
是一个索引 i, j
则值为 val
行在我原来的数据框中,还有一些默认值(0
)否则?此外,是否可以立即创建一个 sparse Dataframe,因为数据已经很大了,但是 N*M
仍然是我数据大小的 10 倍左右?
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
我有一个包含三列的 Pandas 数据框:行、列、值。行值都是 N
以下的整数,列值都是 M
以下的整数。取值均为正整数。
如何高效地创建一个包含 N
行和 M
列的 Dataframe,如果 (i, j , val)
是一个索引 i, j
则值为 val
行在我原来的数据框中,还有一些默认值(0
)否则?此外,是否可以立即创建一个 sparse Dataframe,因为数据已经很大了,但是 N*M
仍然是我数据大小的 10 倍左右?
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