Итак, у меня есть фрейм данных с несколькими столбцами, и я использую этот код для преобразования кадра данных в 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, но без определенного идентификатора или класса, похоже, я не могу этого сделать. Есть ли другой способ сделать это? Спасибо!






Один быстрый и грязный вариант — обработать строку, возвращаемую 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)