数据集
x y a
1 3 0
1 1 0
1 2 0
3 6 0
5 3 1
1 5 0
1 7 0
1 6 0
1 4 0
可视化
网格大小= 8 x 12
数据透视表
X = df.pivot(index='x',columns='y',values='a').values
X[np.isnan(X)] = 0
array([[0., 0., 1., 0., 1., 0., 0., 0.],
[0., 1., 0., 0., 1., 0., 1., 0.],
[0., 0., 0., 0., 1., 0., 0., 0.],
[0., 1., 1., 1., 0., 1., 0., 0.],
[0., 0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 1., 0., 0., 0.]])
这里的数据透视表大小是 (8, 8) 但我希望 (8, 12) 空行被排除在数据透视表中。
最佳答案
尝试使用reindex
:
X = (df.pivot(index='x',columns='y', values='a')
.fillna(0)
.reindex(np.arange(12), axis=1, fill_value=0)
.reindex(np.arange(8), fill_value=0)
)
输出:
y 0 1 2 3 4 5 6 7 8 9 10 11
x
0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
1 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
2 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
3 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
4 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
5 0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0 0 0 0
6 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
7 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0
同时考虑 set_index().unstack()
而不是 pivot
:
X = (df.set_index(['x','y'])
['a'].unstack(fill_value=0)
.reindex(np.arange(12), axis=1, fill_value=0)
.reindex(np.arange(8), fill_value=0)
)
它给你一个更好看的数据:
y 0 1 2 3 4 5 6 7 8 9 10 11
x
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 1 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0 0 0
关于python - Pandas pivot_table 包含空身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66425536/