如何在pandas中的pivot_table之后获得一个多级索引列?

时间:2018-01-29 02:50:24

标签: python pandas

数据帧:

df = pd.DataFrame({
    'date': [1,1,2,2,3,4,4],
    'id': [1,1,1,2,2,2,3],
    'item': [200,201,200,333,334,334,444],
    'buy': [1,1,2,5,4,0,1]
})

df = df[['date','id','item','buy']]


date    id  item    buy
0   1   1   200     1
1   1   1   201     1
2   2   1   200     2
3   2   2   333     5
4   3   2   334     4
5   4   2   334     0
6   4   3   444     1

方法1:

  

df2 = df.pivot_table(index = [' id',' item'],columns = [' date'],   aggfunc =' sum',fill_value = 0).reset_index()

    id  item    buy
date            1   2   3   4
0   1   200     1   2   0   0
1   1   201     1   0   0   0
2   2   333     0   5   0   0
3   2   334     0   0   4   0
4   3   444     0   0   0   1

我怎样才能获得专栏' 1'或者' 2'或者' 3'或者' 4' '购买'柱?

我的试用版重命名了这样的列名称。

df2.columns = ["".join((str(i),str(j))) for i,j in df2.columns]

    id  item    buy1    buy2    buy3    buy4
0   1   200     1       2       0       0
1   1   201     1       0       0       0
2   2   333     0       5       0       0
3   2   334     0       0       4       0
4   3   444     0       0       0       1

和df2 [' buy1'],df2.buy2 ......我想要什么

这是我的问题。

如何在pandas中的pivot_table之后获得一个多级索引列?直接在没有重命名的多级结构上...

方法2:

  

df2 =   df.groupby([' ID''项目''日期'])。。buy.sum()出栈(fill_value = 0).reset_index()   df2.columns.names = ['']

    id  item    1   2   3   4
0   1   200     1   2   0   0
1   1   201     1   0   0   0
2   2   333     0   5   0   0
3   2   334     0   0   4   0
4   3   444     0   0   0   1

如果使用groupby&像方法2一样的unstack,我可以避免多级索引问题,但

但我还是想知道一个方法在pivot_table之后得到一个多级索引列。

1 个答案:

答案 0 :(得分:1)

对于pivot,您可以指出values,然后您将收到所需内容

df.pivot_table(index=['id','item'], columns=['date'], values='buy',aggfunc='sum', fill_value=0).reset_index()
Out[64]: 
date  id  item  1  2  3  4
0      1   200  1  2  0  0
1      1   201  1  0  0  0
2      2   333  0  5  0  0
3      2   334  0  0  4  0
4      3   444  0  0  0  1