Python 如何在pandas中的pivot_表之后获得多级索引列?

Python 如何在pandas中的pivot_表之后获得多级索引列?,python,pandas,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

数据帧:

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_表(索引=['id','item'],列=['date'], aggfunc='sum',fill_value=0).reset_index()

如何获取“购买”列的“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_表之后获得多级索引列?直接在多级结构上,无需重命名


方法2:

df2= df.groupby(['id','item','date']).buy.sum().unstack(fill_value=0.reset_index()) df2.columns.names=['']

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


但我还是想知道一种在pivot_表之后获取多级索引列的方法

对于
透视
,您可以指出
,然后您将收到所需的内容

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

哇!最简单的方法。在另一种情况下,首先是多级数据帧,我该怎么做?@J.Doe yep,:-)快乐编码人(PS:如果这是你需要的,你能接受吗)
    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
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