pandas: salida HTML con formato condicional

Estoy tratando de formatear una tabla, de modo que los datos de cada columna estén formateados en un estilo dependiendo de sus valores (similar al formato condicional en programas de hoja de cálculo). ¿Cómo puedo lograr eso en pandas usando el formateador HTML?

Un caso de uso típico es resaltar valores significativos en una tabla. Por ejemplo:

    correlation  p-value
0   0.5          0.1
1   0.1          0.8
2   0.9          *0.01*

pandas permite definir formateadores personalizados para salida HTML: para obtener la salida anterior, uno podría usar:

import pandas as pd
from pandas.core import format
from StringIO import StringIO
buf = StringIO()
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
fmt = format.DataFrameFormatter(df, 
          formatters={'p_value':lambda x: "*%f*" % x if x<0.05 else str(x)})
format.HTMLFormatter(fmt).write_result(buf)

Sin embargo, me gustaría cambiar el estilo para valores significativos (por ejemplo, usando una fuente en negrita).

Una posible solución sería adjuntar una clase CSS a<td> Etiquetas en la salida HTML, que luego podrían formatearse utilizando la hoja de estilos CSS. Lo anterior se convertiría entonces en:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>correlation</th>
      <th>p_value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>0</td>
      <td> 0.5</td>
      <td> 0.10</td>
    </tr>
    <tr>
      <td>1</td>
      <td> 0.1</td>
      <td> 0.80</td>
    </tr>
    <tr>
      <td>2</td>
      <td> 0.9</td>
      <td class='significant'> 0.01</td>
    </tr>
  </tbody>
</table>

Editar: Según lo sugerido por @ Andy-Hayden, puedo agregar formato simplemente reemplazando las estrellas con<span class="signifcant">...</span> en mi ejemplo:

import pandas as pd
from StringIO import StringIO
buf = StringIO()
significant = lambda x: '<span class="significant">%f</span>' % x if x<0.05 else str(x)
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
df.to_html(buf, formatters={'p_value': significant})

Nuevas versiones de pandas escapan de las etiquetas. Para evitarlo reemplace la última línea con:

df.to_html(buf, formatters={'p_value': significant}, escape=False)

Respuestas a la pregunta(2)

Su respuesta a la pregunta