Pandas中的多索引旋转

时间:2015-01-29 22:01:36

标签: 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

我想将其转换为将表格排列为:

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

为什么?

1 个答案:

答案 0 :(得分:18)

如果我理解你的要求,我认为你想要的是pandas.pivot_table(...),你可以这样使用:

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