我有一个包含三列的 Pandas Dataframe:行、列、值。行值都是低于某些的整数N
,并且列值都是低于某个值的整数M
。这些值都是正整数。
如何有效地创建数据框N
行和M
列,带有 at 索引i, j
价值val
if (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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)