数据帧:
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之后得到一个多级索引列。
答案 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