python - Pandas pivot_table 和额外的索引级别
问题描述
首先,我是唯一一个对 pivot_table 创建额外级别的索引/列名感到非常沮丧的人吗?我从来没有使用过 pivot_tables 并且想要除了平面数据框类型之外的任何东西,但是每次我使用它时,我都被迫重置索引、找出列名等。
这是一个示例,我有一个如下所示的数据框:
geography variable_type t0 t1 t2 t3
geo1 var1 1 3 4 8
geo1 var2 8 9 3 1
geo2 var1 4 7 9 4
geo2 var2 1 8 3 5
我想要完成的是:
geography time var1 var2
geo1 0 1 8
geo1 1 3 9
geo1 2 4 3
geo1 3 8 1
geo2 0 4 1
geo2 1 7 8
geo2 2 9 3
geo2 3 4 5
到目前为止我的代码:
pd.melt(df,id_vars=['geography','variable_type']).pivot_table(index=['geography','variable'],columns='variable_type')
这给了我一些东西,其中地理和变量看起来是索引,并且列似乎是不同的变量,但它们似乎有一个父级别的“值”和“variable_type”的名称。如果我像这样添加 reset_index() :
pd.melt(df,id_vars=['geography','variable_type']).pivot_table(index=['geography','variable'],columns='variable_type').reset_index()
然后我最终得到的变量仍然具有“variable_type”的名称和“value”的父级别,而索引已解析并且为 0-n。
所以我的问题是:
- 我该如何在此时此地解决这个问题?我想要一个看起来像 csv 或数据库表或任何其他普通数据框的平面数据框。
- 是否有另一种方法可以在不使用 pivot_table 的情况下执行此操作,或者使用 pivot_table 而不引入所有这些我十亿年来从未想要的新索引级别/名称?
解决方案
添加values
选项pivot_table
和链rename_axis
df_final = (pd.melt(df,id_vars=['geography','variable_type'])
.pivot_table(index=['geography','variable'],columns='variable_type',values='value')
.reset_index().rename_axis(None,axis=1))
Out[75]:
geography variable var1 var2
0 geo1 t0 1 8
1 geo1 t1 3 9
2 geo1 t2 4 3
3 geo1 t3 8 1
4 geo2 t0 4 1
5 geo2 t1 7 8
6 geo2 t2 9 3
7 geo2 t3 4 5
推荐阅读
- c# - 检查 Geopoint 是否位于 GeoboundingBox 内
- java - 当我尝试将我的项目导出为可运行的 jar 文件时,我看到了这个错误
- tensorflow - Tensorflow 对象检测 API 低损失低置信度 - 检查点不保存权重
- looker - Looker:仅在仪表板窗口可见时运行查询
- jmeter - Jmeter 不返回与 Postman 相同的 json 响应
- angular - “模板”上的角度检查字符串模式
- vue.js - 覆盖 vuetify 中的 scss 变量
- java - 将 Windows 上的 Java 调用 API 与 CMAKE 链接
- html - Bootstrap 3 - 数据容器更改工具提示自定义 css
- python - 如何使用键盘快捷键在jupyter笔记本中向上/向下移动行(不是单元格)?