Можно ли добавить класс или идентификатор в определенный столбец <td> при использовании python pandas dataframe.to_html()

Итак, у меня есть фрейм данных с несколькими столбцами, и я использую этот код для преобразования кадра данных в HTML-код:

options_df = pd.DataFrame(data, columns=[
    'Ticker', 'Type', 'Strike', 'Expiration', 'Filled', 'Current Premium', 'P/L', 'Date Signaled'])

html_str = '''
<html>
    <head><title>HTML Pandas Dataframe with CSS</title></head>
    <link rel = "stylesheet" href = "df_styles.css"/>
    <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src = "/js/my.js"></script>
    <body>
        {options_table}
    </body>
</html>.
'''

with open("index.html", "w") as options_f:
    options_f.write(html_str.format(
        options_table=options_df.to_html(classes='mystyle')))

Это выводится как: (показывает только первую строку для целей длины)

<html>
    <head><title>HTML Pandas Dataframe with CSS</title></head>
    <link rel = "stylesheet" href = "df_styles.css"/>
    <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src = "/js/my.js"></script>
    <body>
        <table border = "1" class = "dataframe mystyle">
<thead>
<tr style = "text-align: right;">
  <th></th>
  <th>Ticker</th>
  <th>Type</th>
  <th>Strike</th>
  <th>Expiration</th>
  <th>Filled</th>
  <th>Current Premium</th>
  <th>P/L</th>
  <th>Date Signaled</th>
</tr>
</thead>
<tbody>
<tr>
  <th>0</th>
  <td>$OSTK</td>
  <td>Call</td>
  <td>90</td>
  <td>2021-03-19</td>
  <td>7.9</td>
  <td>3.06</td>
  <td>-484</td>
  <td>2020-11-30</td>
</tr>

Для восьмого столбца (то есть столбца, который читает -484 в выводе выше) в каждой строке я хотел бы дать ему определенный идентификатор или класс. Есть ли способ сделать это в python с помощью pandas dataframe.to_html() или есть другая функция, которая может это сделать?

Если нет, задача, которую я пытаюсь выполнить, — изменить цвет фона восьмого столбца в зависимости от того, является ли значение в нем отрицательным или положительным. И моя идея состояла в том, чтобы сделать это в jQuery, но без определенного идентификатора или класса, похоже, я не могу этого сделать. Есть ли другой способ сделать это? Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
313
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один быстрый и грязный вариант — обработать строку, возвращаемую df.to_html(). Например:

data = [
    ['K1', 1],
    ['K2', -1],
]

df = pd.DataFrame(data, columns=['key', 'value'])

m_positive = df['value'] > 0
df.loc[m_positive, 'value'] = '__positive__' + df.loc[m_positive, 'value'].astype(str)
df.loc[~m_positive, 'value'] = '__negative__' + df.loc[~m_positive, 'value'].astype(str)

def updateRowStyle(line):
    return line.replace('>__positive__', ' class = "positive">').replace('>__negative__', ' class = "negative">')

result =list(map(updateRowStyle, df.to_html().split('\n')))

for line in result:
    print(line)

Другие вопросы по теме