首页 > 解决方案 > 透视类别列

问题描述

数据框

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')不会产生预期的结果。

标签: pythonpandas

解决方案


你可以试试

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')

推荐阅读