https://stackoverflow.com/a/17652442/2478647にあるパターンに従って、Reportlab の Pandas pivot_table からの出力をプロットしようとしています。
import pandas as pd
from reportlab.pdfgen import canvas
from reportlab.platypus import SimpleDocTemplate, Table, Paragraph
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter, legal, portrait, landscape
from reportlab.lib.styles import getSampleStyleSheet
df = pd.DataFrame(randn(8, 2), columns=['var A', 'var B'])
df['year'] = ['2013','2013','2013','2013','2014','2014','2014','2014']
df['run'] = ['base','base','option','option','base','base','option','option']
df['id'] = [1,2,1,2,1,2,1,2]
df.pivoted = pd.pivot_table(df, values=['var A','var B'], rows=['id'], cols=['year','run'], aggfunc='sum')
doc = SimpleDocTemplate('temp.pdf', pagesize=landscape(letter), showBoundary=0,
topMargin=72*.75,
bottomMargin=72*1,
leftMargin=72*.5,
rightMargin=72*.5)
lista = [df.pivoted.columns[:,].values.astype(str).tolist()] + df.pivoted.values.tolist()
elements = []
table = Table(lista, repeatRows=3) # repeat the header rows
elements.append(table)
doc.build(elements)
複数の列ラベルがあるため、「lista = ...」行でこのエラーが発生します。
ValueError: cannot set an array element with a sequence
pivot_table 列が reportlab でうまく機能するようにコードを構成するにはどうすればよいですか? または、pivot_table 出力を使用して PDF レポートを作成するための別のアプローチについて何か提案はありますか?
編集:私はこの変更にかなり近づいていますが、まだy軸ラベルを保持していません
lista = map(list, zip(*df.pivoted.columns.values)) + df.pivoted.values.tolist()