python - 如何仅转置数据帧的一部分或交换行和列?
问题描述
输入数据框是这样的:
branch Round letter var1 var2 var3
A 1 a 1 2 4
A 1 b 3 4 5
B 2 a 6 7 9
B 2 b 2 3 8
我只想将第 3 列(即“字母”)与“var1”、“var2”、“var3”列交换,如下所示:
输出数据框:
branch Round category a b
A 1 var1 1 3
A 1 var2 2 4
A 1 var3 4 5
B 2 var1 6 2
B 2 var2 7 3
B 2 var3 9 8
如何使用熊猫做到这一点?
解决方案
将分支和字母设置为索引,然后堆叠数据帧,并在级别 1 取消堆叠。如果需要,您可以重置索引。
>>> (df.set_index(['branch', 'letter'])
.stack()
.unstack(1)
.reset_index(-1)
.rename(columns={'level_1':'category'}))
输出:
letter category a b
branch
A var1 1 3
A var2 2 4
A var3 4 5
B var1 6 2
B var2 7 3
B var3 9 8
您甚至可以DataFrame.pivot
使用stack
:
>>> df.pivot('branch', 'letter').stack(0)
letter a b
branch
A var1 1 3
var2 2 4
var3 4 5
B var1 6 2
var2 7 3
var3 9 8
推荐阅读
- excel - 使用 sumif 对 InputBox 中的条件求和范围
- xamarin.forms - 开箱即用的 Xamarin Android 应用在 MainActivity 中显示未定义的 Android.Support、Android.Views、Android.Content
- postgresql - 使用保存在 Postgres 中的 QGIS 项目作为 QGIS 服务器的项目文件
- python - “errorMessage”:“时间数据 '' 与 Lambda 脚本 AWS 中的格式 '%Y-%m-%d %H:%M:%S %Z' 不匹配”
- c# - EF 6,从 DTO 更新实体,但只有现有属性(通用代码)
- spring-boot - 如何在非阻塞线程中同步获取单声道对象?
- java - 我如何摆脱工具栏和回收站视图之间的这种差距?
- python - Python Django - 自动注销 - 非活动用户
- angular - mapbox angular9中的反向地理编码
- python-3.x - 从熊猫数据框中按类别计算百分比