pandas - 多索引熊猫数据透视表将字体粗细从“粗体”更改为“正常”
问题描述
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,就像我拥有的图像一样?或者任何其他我可以让小计和总计弹出然后数据框的其余部分的方式。
解决方案
棘手的问题...您将需要找到一种方法来选择某些标签。
让我们为 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:
推荐阅读
- avro - AVRO 模式演变添加带有默认值的可选列失败反序列化
- php - laravel 5 以后发送电子邮件(邮件)时出错?
- python - Sympy:功能递归关系
- php - Typeahead 插件有更好的搜索 Mysql 查询吗?
- javascript - 使用正则表达式捕获说话者的姓名和评论
- kotlin - Kotlin 的 ArgumentMatcher
- reactjs - 如何将 GitHub 中的 react 应用程序作为组件导入到新的 react 应用程序中?
- r - 用不同的总和总结 R (pivot) 中的数据
- java - 如何在java中生成唯一的字母数字ID 11个字符长
- akka - 演员在处理消息之前被杀死