我有一个像这样的数据框:
df = pd.DataFrame({
'Counterparty': ['foo', 'fizz', 'fizz', 'fizz','fizz'],
'Commodity': ['bar', 'bar', 'bar', 'bar','bar'],
'DealType': ['Buy', 'Buy', 'Buy', 'Buy', 'Buy'],
'StartDate': ['07/01/2024', '09/01/2024', '10/01/2024', '11/01/2024', '12/01/2024'],
'FloatPrice': [18.73, 17.12, 17.76, 18.72, 19.47],
'MTMValue':[10, 10, 10, 10, 10]
})
df = df.set_index(['Counterparty', 'Commodity', 'DealType','StartDate']).sort_index()[['FloatPrice', 'MTMValue']]
print(df)
我正在尝试将样式应用于数据框,然后再将其导出到 Excel。这就是我到目前为止所做的:
def style_index(s):
return "background-color: lightblue; text-align: center; border: 1px solid black; vertical-align: middle;"
def style_header(s):
return "background-color: lightgrey; text-align: center;"
styled_df = df.style.set_properties(**{
'background-color': 'darkblue',
'color': 'white',
'text-align': 'center'}).map_index(style_index).map_index(style_header, axis="columns")
产生这个:
但是我需要数据框看起来像这样:
此外,我觉得有一种更有效的方法来完成我已经在做的事情,所以任何建议都会受到赞赏。
编辑:设法使文本在中心垂直对齐,但仍然没有突出显示索引列标题
我不确定如何使用map_index获取索引名称,但是,您可以使用set_table_style设置它:
styled_df.set_table_styles([dict(selector='.index_name', props=[('text-align', 'center'), ('background-color', 'lightgray')])])