python - 突出显示python pandas to_latex中每一行的最佳值
问题描述
我正在使用pandas
自动生成表格to_latex()
,并且我想突出显示(粗体、斜体等)每行的最佳值(最大值、最小值)。
有没有办法做到这一点?
我在他们的 github 中发现了这个问题,但是没有提供答案,我也没有找到后续行动。
解决方案
根据此评论,已经有一个PR 请求将在未来支持这一点,并且可能会与 pandas 1.3.0 一起发布。同时,我在另一个问题中找到了这个解决方案,它只强调每列的最大值:
from functools import partial
import pandas as pd
import numpy as np
def bold_formatter(x, value, num_decimals=2):
"""Format a number in bold when (almost) identical to a given value.
Args:
x: Input number.
value: Value to compare x with.
num_decimals: Number of decimals to use for output format.
Returns:
String converted output.
"""
# Consider values equal, when rounded results are equal
# otherwise, it may look surprising in the table where they seem identical
if round(x, num_decimals) == round(value, num_decimals):
return f"{{\\bfseries\\num{{{x:.{num_decimals}f}}}}}"
else:
return f"\\num{{{x:.{num_decimals}f}}}"
df = pd.DataFrame(np.array([[1.123456, 2.123456, 3.123456, 4.123456],
[11.123456, 22.123456, 33.123456, 44.123456],
[111.123456, 222.123456, 333.123456, 444.123456],]),
columns=['a', 'b', 'c', 'd'])
col_names = ['a in \\si{\\meter}',
'b in \\si{\\volt}',
'c in \\si{\\seconds}',
'd']
# Colums to format with maximum condition and 2 floating decimals
max_columns_2f = ['a']
# Colums to format with minimum condition and 2 floating decimals
min_columns_2f = ['b', 'c']
# Colums to format with minimum condition and 4 floating decimals
min_columns_4f= ['d']
fmts_max_2f = {column: partial(bold_formatter, value=df[column].max(), num_decimals=2) for column in max_columns_2f}
fmts_min_2f = {column: partial(bold_formatter, value=df[column].min(), num_decimals=2) for column in min_columns_2f}
fmts_min_4f = {column: partial(bold_formatter, value=df[column].min(), num_decimals=4) for column in min_columns_4f}
fmts = dict(**fmts_max_2f, **fmts_min_2f, **fmts_min_4f)
with open("test_table.tex", "w") as fh:
df.to_latex(buf=fh,
index=False,
header=col_names,
formatters=fmts,
escape=False)
推荐阅读
- html - 展开容器而不展开父/整行
- javascript - 在检查唯一值时使用 {} 或使用 new Set() 声明一个空对象更好吗?
- ios - 使用 react-native-community/voice 的语音到文本在 iOS 中没有给出正确的结果
- javascript - 尝试获取用户输入时未定义
- curl - 如何使用 ansible 模块将文件上传到 nexus?
- iframe - Net Core 3.1 iframe 中没有会话
- jwt - openid 隐式流授权用户无法从 syncgateway couchbase 中提取
- javascript - 我想在 android 手机上隐藏元素并在 iOS 上显示它
- reactjs - 使用 react-hook-form 在同一页面上添加两个表单
- php - 在 PHP 中创建字符串的首字母缩写词