python - 将 3D 熊猫数据帧转换为 2d
问题描述
我有一个具有 2 级索引和一列的 3D 数据框,如下所示:
col1
0 0 67.23
0 1 7382
0 2 43
.
.
0 8002 54
0 8003 87
1 0 348
1 1 83
1 2 234
.
.
1 8002 23
1 8003 87
....
9 0 348
9 1 833
9 2 43433
.
.
9 8002 23
9 8003 87
第一级有 10 个索引,每个第二级有 8004 个元素。我需要将其重塑为二维数据框,如下所示:
0 | 1 | 2 | 3 | ... | 8000 | 8001 | 8002 | 8003
--------------------------------------------------
0 | | | | | | | |
1 | | | | | | | |
2 | | | | | | | |
. | | | | | | | |
. | | | | | | | |
8 | | | | | | | |
9 | | | | | | | |
为此,我创建了一个新索引:new_idx = pd.Index(range(0,10))
和新列:cols = range(0,8004)
然后尝试使用pivot
如下:
2d_df = df.pivot(index=new_idx, columns=cols, values='var1')
但这给了我一个错误:Int64Index([0,1,2,3,4,5,6,7,8,9], dtype='int64') not in index
. 我该怎么做?
解决方案
尝试使用DataFrame.unstack
- 请记住,如果您有重复的索引,这将不起作用。
df_2d = df.unstack(1)
然后使用以下方法修复列级别:
df_2d.columns = df_2d.columns.droplevel(0)
推荐阅读
- arrays - MongoDB - 使用不同的值查询输出更改
- sql-server - 如何根据不同表中的几列将多行插入到多对多表中
- r - Dplyr Filter Bug
- pandas - Grab the Memory Usage Value from Pandas DataFrame.info()
- perl - Perl Text::CSV unknown variable
- go - Gorilla Mux 和 GORM 失败
- java - 如何使用 jmeter 从用户创建的 jar 中调用方法
- css - 将css形状添加到数据表分页
- angular - 使用切换选项打开/关闭 ngx-material-keyboard
- ruby - 使用整数将 Ruby 字符串格式化为 3 个字符