python - 透视类别列
问题描述
数据框
import pandas as pd
df = pd.DataFrame({'date':['2015-01-01','2015-01-01','2015-01-01','2015-0101','2015-01-02','2015-01-02','2015-01-02','2015-01-02'],
'id':[1,1,2,2,1,1,2,2],
'kind':['min','max','min','max','min','max','min','max'],
'values':[1,2,3,4,5,6,7,8]})
print(df)
date id kind values
0 2015-01-01 1 min 1
1 2015-01-01 1 max 2
2 2015-01-01 2 min 3
3 2015-01-01 2 max 4
4 2015-01-02 1 min 5
5 2015-01-02 1 max 6
6 2015-01-02 2 min 7
7 2015-01-02 2 max 8
包含日期和 ID 的每个(唯一)组合的最小值和最大值。
如何旋转kind列,使生成的数据框看起来像
date id min max
0 2015-01-01 1 1 2
1 2015-01-01 2 3 4
2 2015-01-02 1 5 6
3 2015-01-02 2 7 8
?
df.pivot(columns='kind')
不会产生预期的结果。
解决方案
你可以试试
df.set_index(['date','id','kind'])['values'].unstack().reset_index()
Out[94]:
kind date id max min
0 2015-01-01 1 2 1
1 2015-01-01 2 4 3
2 2015-01-02 1 6 5
3 2015-01-02 2 8 7
或者
df.pivot_table(index=['date','id'],columns='kind',values='values')
推荐阅读
- sql - 根据单元格中的值创建记录
- mercurial - Mercurial:如何查找我的分支上次合并到默认值的时间
- django - Django 开发服务器在 Windows 中意外停止
- c# - 如何检查用户是否登录数据库C#
- async-await - 让异步方法上的 await 调用等到完成
- c# - 无法将类型为“<>f__AnonymousType5`3[System.String,System.String,System.String]”的对象转换为类型“System.Data.DataRowView”。
- javascript - 如何让 JSON 解析包含单引号的 JSON 字符串
- asp.net-web-api - 如何检索我的 api 的所有已实现版本的列表?
- python-3.x - Python 3:PyCharm 中未使用局部变量“xyz”值警告
- javascript - 我在为 Android 构建 quasar 项目时遇到问题