python - 以特定方式在 pandas 中从长到宽旋转选择的列
问题描述
import pandas as pd
from io import StringIO
csv = '''\
a,b,name,points,marks,sets
1,2,ben,22,5,13
1,2,dave,23,4,11
'''
df = pd.read_csv(StringIO(csv))
鉴于上述情况,如下所示:
a b name points marks sets
0 1 2 ben 22 5 13
1 1 2 dave 23 4 11
我希望能够将其重塑为以下内容:
csv= '''\
a,b,ben_points,dave_points,ben_marks,dave_marks,ben_sets,dave_sets
1,2,22,23,5,4,13,11
'''
df = pd.read_csv(StringIO(csv))
看起来像:
a b ben_points dave_points ben_marks dave_marks ben_sets dave_sets
0 1 2 22 23 5 4 13 11
不过,我不确定如何解决这个问题 - 这里有一列 ( name
) 正在传播 (?) 与其他三列的组合。
解决方案
我们可以做unstack
然后展平多个索引列
s=df.set_index(['a','b','name']).unstack('name')
s.columns = s.columns.map('{0[1]}_{0[0]}'.format)
s.reset_index(inplace=True)
s
a b ben_points dave_points ben_marks dave_marks ben_sets dave_sets
0 1 2 22 23 5 4 13 11
与上述相同的解决方案,但路线不同:
s = df.set_index(["a", "b", "name"]).unstack("name").swaplevel(1, 0, axis=1)
#flatten the columns and join with "_"
s.columns = ["_".join(entry) for entry in s.columns.to_flat_index()]
#reset index, same as first solution
s = s.reset_index()
推荐阅读
- jquery - 如何在 jQuery Datatable 中显示枚举字符串?
- amazon-web-services - 使用 AWS cloudformation 模板创建标准 AWS Cloudwatch 警报
- r - 如何仅使用 excel 中的计数将条形图添加到我的仪表板并将其显示为图表
- java - 我们什么时候应该在java中使用执行器框架?
- node.js - 如何在每个服务器的 react-admin 中设置不同的 url?
- compiler-errors - gdcm2vtk 编译错误
- mysql - mysql分组结果在不同的行中找到
- python - 如何让语音助手停止听我的命令并开始听我的命令
- java - Java 发送多个 HTTP 请求的最佳方式
- python - 将图例添加到 Altair 中的自定义误差带图表