Pandas 中的多索引旋转

2022-01-22 00:00:00 python pandas pivot

问题描述

考虑以下数据框:

         item_id  hour    when        date      quantity
110   0YrKNYeEoa     1  before  2015-01-26        247286
111   0UMNiXI7op     1  before  2015-01-26        602001
112   0QBtIMN3AH     1  before  2015-01-26        981630
113   0GuKXLiWyV     1  after   2015-01-26       2203913
114   0SoFbjvXTs     1  after   2015-01-26        660183
115   0UkT257SXj     1  before  2015-01-26        689332
116   0RPjXnkiGx     1  after   2015-01-26        283090
117   0FhJ9RGsLT     1  before  2015-01-26       2024256
118   0FhGJ4MFlg     1  before  2015-01-26         74524
119   0FQhHZRXhB     1  before  2015-01-26             0
120   0FsSdJQlTB     1  before  2015-01-26             0
121   0FrrAzTFHE     1  before  2015-01-26             0
122   0FfkgBdMHi     1  before  2015-01-26             0
123   0FOnJNexRn     1  before  2015-01-26             0
124   0FcWhIdBds     1  before  2015-01-26             0
125   0F2lr0cL9t     1  before  2015-01-26       1787659

我想旋转它以使表格排列为:

I would like to pivot it to get the table arranged as:

Index                     before           after
(item_id, hour, date)   quantityB      quantityA

当我尝试:

df.pivot(index=['item_id', 'hour', 'date'], columns='when', values='quanty')

我明白了:

ValueError: Wrong number of items passed 8143, placement implies 3

为什么?


解决方案

如果我明白你在问什么,我想你想要的是 pandas.pivot_table(...) ,你可以像这样使用所以:

If I understand what you are asking I think what you want is pandas.pivot_table(...) which you can use like so:

table = pd.pivot_table(df, index=['item_id', 'hour', 'date'], columns='when', values='quantity')

其中有一个样本数据框

    item_id  hour  when      date     quantity
0       a     1  before  2015-01-26        25
1       b     1  before  2015-01-26        14
2       a     1   after  2015-01-26         4
3       d     1  before  2015-01-26        43
4       b     1   after  2015-01-26        30
5       d     1   after  2015-01-26        12

生产

when                     after  before
item_id hour date                     
a       1    2015-01-26      4      25
b       1    2015-01-26     30      14
d       1    2015-01-26     12      43

相关文章