Вы можете использовать свойство .style , которое обеспечивает высокий уровень контроля над внешним видом полученного HTML-кода. Некоторые знания CSS требуются, однако:
import pandas as pd
import numpy as np
import pdfkit
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))], axis=1)
styles = [dict(selector='.col3', props=[('min-width', '300px')]), dict(selector='.data', props=[('min-width', '6em')])]
html = df.style.hide_index().set_table_styles(styles).set_table_attributes('border=3 cellspacing=0').render()
with open(os.path.abspath(html_output_file_path), 'w') as f:
f.write(html)
pdfkit.from_string(html, os.path.abspath(pdf_output_file_path))
Это создаст следующий вид: ![enter image description here](https://i.stack.imgur.com/vOJgm.png)