有条件地将 Pandas 的单元格格式化为 to_html

时间:2021-02-22 07:10:04

标签: python pandas

我有一个如下所示的熊猫数据框

print(df_t)                                                                                                                                                                                                                                                               
   foo  bar
a    1    2
b    9    7

这会生成以下 html

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: center;">
      <th></th>
      <th>foo</th>
      <th>bar</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>a</th>
      <td>1</td>
      <td>2</td>
    </tr>
    <tr>
      <th>b</th>
      <td>9</td>
      <td>7</td>
    </tr>
  </tbody>
</table>

我想将行中较大的单元格值加粗 例如 在第一行,要“加粗”值 2,在第二行,要加粗值 9。

2 个答案:

答案 0 :(得分:2)

使用styles并通过Styler.render生成html:

def highlight_max(s):
    '''
    highlight the maximum in a Series bolder.
    '''
    is_max = s == s.max()
    return ['font-weight: bolder' if v else '' for v in is_max]

html = df.style.apply(highlight_max, axis=1).render()

print (html)

答案 1 :(得分:1)

你可以试试jinja2

from jinja2 import Template #pip install Jinja2

s = """<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: center;">
      <th></th>
      {% for cloumn in df.columns %}
      <th>{{cloumn}}</th>
      {% endfor %}
    </tr>
  </thead>
  <tbody>
  {% for index, row in df.iterrows() %}
    <tr>
      <th>{{index}}</th>
      {% for val in row.values %}
        {% if val == row.values.max() %}
            <td><strong>{{val}}<strong></td>
        {% else -%}
            <td>{{val}}</td>
        {% endif %}
      {% endfor %}
    </tr>
  {% endfor %}
  </tbody>
</table>"""

output_html = Template(s).render({'df': df})

print(output_html)
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: center;">
      <th></th>
      <th>foo</th>
      <th>bar</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>a</th>
        <td>1</td>
            <td><strong>2<strong></td>
    </tr>
    <tr>
      <th>b</th>
            <td><strong>9<strong></td>
        <td>7</td>
    </tr>
  </tbody>
</table>