数据框:
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
方法一:
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 之后获取多级索引列?直接在多层结构上,无需重命名...
方法二:
df2 = df.groupby(['id','item','date']).buy.sum().unstack(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
如果像方法 2 那样使用 groupby 和 unstack,我可以避免多级索引问题,不过
但我仍然想知道在数据透视表之后获取多级索引列的方法。
最佳答案
对于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
关于python - 我怎样才能在 pandas 中的 pivot_table 之后得到一列多级索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48493726/