首页 > 解决方案 > 多索引熊猫数据透视表将字体粗细从“粗体”更改为“正常”

问题描述

我有数据透视表

df=pd.DataFrame({'Fruit':['Apple', 'Orange', 'Apple', 'Apple', 'Orange', 'Orange'],
            'Variety':['Fuji', 'Navel', 'Honeycrisp', 'Gala', 'Tangerine', 'Clementine'],
            'Count':[2, 5, 5, 1, 8, 4]})
df_pvt=pd.pivot_table(df, index=['Fruit','Variety'], values=['Count'], aggfunc=np.sum)
df=pd.concat([d.append(d.sum().rename((k, 'SubTotal'))) for k, d in df_pvt.groupby(level=0)]).append(df_pvt.sum().rename(('','GrandTotal')))

我想要的数据透视表

我如何获得“SubTotal”、“GrandTotal”和那些值“粗体”以及 Variety 和 Count 下的其余字体作为“正常”font_weight,就​​像我拥有的​​图像一样?或者任何其他我可以让小计和总计弹出然后数据框的其余部分的方式。

标签: pandaspivot-table

解决方案


棘手的问题...您将需要找到一种方法来选择某些标签。

让我们为 Jupyter 笔记本尝试这一点 CSS 选择器编码。

def styleme(x):
    fw = 'bold' if 'Total' in x.name[1] else 'normal'
    l = [f'font-weight: {fw}']*len(x)
    return l

total_idx = np.where(~df.index.get_level_values(1).str.contains('Total'))

table_style = [{'selector':f'tbody tr th[id*=level1_row{i}]', 'props':[('font-weight','normal')]} for i in total_idx[0]]
df.style.apply(styleme, axis=1).set_table_styles(table_style)

输出:

在此处输入图像描述

但是,和以前一样,在上一篇文章中,这种格式并没有延续到 to_excel 输出中的 excel:

在此处输入图像描述


推荐阅读