2016-07-22 6 views
1

Я пытаюсь отправить свою сводную таблицу, которую я создал на новый лист в рабочей книге, однако по какой-то причине, когда я выполняю свой код, новый лист создается с помощью сводной таблицы table (лист называется «Sheet1»), и лист данных удаляется.Создайте таблицу pandas pivot на новом листе в рабочей книге

Вот мой код:

worksheet2 = workbook.create_sheet() 
worksheet2.title = 'Sheet1' 
worksheet2 = workbook.active 
workbook.save(filename) 

excel = pd.ExcelFile(filename) 
df = pd.read_excel(filename, usecols=['Product Description', 'Supervisor']) 

table1 = df[['Product Description', 'Supervisor']].pivot_table(index='Supervisor', columns='Product Description', aggfunc=len, fill_value=0, margins=True, margins_name='Grand Total') 



print table1 

writer = pd.ExcelWriter(filename, engine='xlsxwriter') 
table1.to_excel(writer, sheet_name='Sheet1') 
workbook.save(filename) 
writer.save() 

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

enter image description here

Как я могу добавить столбец к концу, который суммирует каждую строку? Как это: (я просто нужно столбец в конце концов, я не забочусь о форматировании это так или что-нибудь)

enter image description here

+0

Можете ли вы включить первую часть кода? – bernie

+1

Обновлен вопрос с полной функцией. – Harrison

+0

@bernie Теперь моя сводная таблица исправлена, но как вы думаете, вы могли бы помочь мне разобраться, почему лист сводной таблицы удаляет лист данных? Кажется, я отправил сводный стол, чтобы неловко преуспеть. – Harrison

ответ

3

Просто используйте margins=True и margins_name='Grand Total' параметры при вызове pivot_table()

Demo:

In [15]: df = pd.DataFrame(np.random.randint(0, 5, size=(10, 3)), columns=list('abc')) 

In [16]: df 
Out[16]: 
    a b c 
0 4 3 0 
1 1 1 4 
2 4 4 0 
3 2 3 2 
4 1 1 3 
5 3 1 3 
6 3 3 0 
7 0 2 0 
8 2 1 1 
9 4 2 2 

In [17]: df.pivot_table(index='a', columns='b', aggfunc='sum', fill_value=0, margins=True, margins_name='Grand Total') 
Out[17]: 
       c 
b    1 2 3 4 Grand Total 
a 
0    0.0 0.0 0.0 0.0   0.0 
1    7.0 0.0 0.0 0.0   7.0 
2    1.0 0.0 2.0 0.0   3.0 
3    3.0 0.0 0.0 0.0   3.0 
4    0.0 2.0 0.0 0.0   2.0 
Grand Total 11.0 2.0 2.0 0.0  15.0 
+1

Bam! +1 ... Вы также можете указать 'margins_name = 'Grand Total'' – bernie

+0

Где бы я положил margin = True? Кроме того, устранит ли это факт, что мой файл excel содержит только сводную таблицу, а не лист данных? – Harrison

+1

@bernie, хороший момент, спасибо! :) – MaxU

Смежные вопросы