2016-05-10 5 views
1

Я новичок в Python, и я бы хотел использовать Python для репликации общей задачи excel. Если на этот вопрос уже был дан ответ, сообщите мне. Я не смог его найти. У меня есть следующие панд dataframe (данные):Pandas KeyError using pivot

Date Stage SubStage Value 
12/31/2015 1.00 a 0.896882891 
1/1/2016  1.00 a 0.0458843 
1/2/2016  1.00 a 0.126805588 
1/3/2016  1.00 b 0.615824461 
1/4/2016  1.00 b 0.245092069 
1/5/2016  1.00 c 0.121936318 
1/6/2016  1.00 c 0.170198128 
1/7/2016  1.00 c 0.735872415 
1/8/2016  1.00 c 0.542361912 
1/4/2016  2.00 a 0.723769247 
1/5/2016  2.00 a 0.305570257 
1/6/2016  2.00 b 0.47461605 
1/7/2016  2.00 b 0.173702623 
1/8/2016  2.00 c 0.969260251 
1/9/2016  2.00 c 0.017170798 

В Excel я могу использовать сводную таблицу, чтобы произвести следующее:

excel pivot table using 'data'

Представляется целесообразным сделать следующее питона:

data.pivot(index='Date',columns = ['Stage','SubStage'],values = 'Value') 

Но что производит:

KeyError: 'Level Stage not found' 

Что дает?

+1

сделать ваши метки столбцов имеют конечные или ведущие пробелы? проверьте, проверив с помощью 'data.columns' –

+0

Они не имеют: data.columns Индекс (['Дата', 'Этап', 'SubStage', 'Value'], dtype = 'object') – trob

ответ

2

Вы хотите .pivot_table, а не .pivot.

import pandas 
from io import StringIO 

x = StringIO("""\ 
Date Stage SubStage Value 
12/31/2015 1.00 a 0.896882891 
1/1/2016  1.00 a 0.0458843 
1/2/2016  1.00 a 0.126805588 
1/3/2016  1.00 b 0.615824461 
1/4/2016  1.00 b 0.245092069 
1/5/2016  1.00 c 0.121936318 
1/6/2016  1.00 c 0.170198128 
1/7/2016  1.00 c 0.735872415 
1/8/2016  1.00 c 0.542361912 
1/4/2016  2.00 a 0.723769247 
1/5/2016  2.00 a 0.305570257 
1/6/2016  2.00 b 0.47461605 
1/7/2016  2.00 b 0.173702623 
1/8/2016  2.00 c 0.969260251 
1/9/2016  2.00 c 0.017170798 
""") 

df = pandas.read_table(x, sep='\s+') 
xtab = df.pivot_table(index='Date', columns=['Stage','SubStage'], values='Value') 
print(xtab.to_string(na_rep='--')) 

И это дает мне:

Stage   1.0       2.0      
SubStage   a   b   c   a   b   c 
Date                 
1/1/2016 0.045884  --  --  --  --  -- 
1/2/2016 0.126806  --  --  --  --  -- 
1/3/2016   -- 0.615824  --  --  --  -- 
1/4/2016   -- 0.245092  -- 0.723769  --  -- 
1/5/2016   --  -- 0.121936 0.305570  --  -- 
1/6/2016   --  -- 0.170198  -- 0.474616  -- 
1/7/2016   --  -- 0.735872  -- 0.173703  -- 
1/8/2016   --  -- 0.542362  --  -- 0.969260 
1/9/2016   --  --  --  --  -- 0.017171 
12/31/2015 0.896883  --  --  --  --  -- 
+0

Это полезно , Вообще говоря, является pivot_table в отличие от поворота согласованной передовой практики? Почему в мире существуют две функции для одной и той же концепции? – trob

+0

Они служат для разных целей, но я не мог сказать вам, что они собой представляют. Я всегда 'stack/unstack' с многоуровневым индексом, чтобы сделать что-то вроде этого. @trob –

+0

Отлично. Спасибо! – trob