python - Pandas pivot_table 包括空身份
问题描述
数据集
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
推荐阅读
- jquery - 选择选择 - 注入动态选项作为第一个选择选项
- laravel - 验证请求中的数据失败
- javascript - 在 Shopify 网页中创建简单的尺寸转换脚本
- c++ - c++- 数字 100 的阶乘
- flutter - 如何从 inAppWeview Flutter 中的 webVew 按钮操作接收值
- java - 如何在java8中解析像“5th Apr 1920”这样的日期字符串
- halide - 为什么 extern 函数被多次调用?
- sql - 无法在 Sql 中加载 csv 文件
- javascript - discord.js未处理的承诺拒绝警告:TypeError:无法读取属性'includes' of null
- amazon-web-services - 关于添加内联策略与附加托管策略的性能