Я хочу создавать HTML-таблицы из фреймов данных Python для генерации отчетов по электронной почте.
Я хочу иметь возможность динамически генерировать эти таблицы и группировать вещи, устанавливая различные диапазоны строк для агрегирования по разным столбцам. Где пользователи могутчтобы выбрать столбец, по которому нужно сгруппировать данные.
Я могу сделать это довольно легко при группировании по одному столбцу.Но скажите, когда я хочу сделать это в двух столбцах, таких как ниже для столбцов Code и CCY:
https://imgur.com/kgwdBFm
<html>
<table cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">
<tr>
<thead>
<th>Code</th>
<th>Total # of Entries</th>
<th>A</th>
<th>B</th>
<th>Description</th>
<th>Ccy</th>
<th>Date 1</th>
<th>Date 2</th>
<th>Px_chg_pct</th>
</thead>
</tr>
<tr>
<td>ABC</td>
<td>1</td>
<td>4405</td>
<td>3B1070</td>
<td>TEXT</td>
<td>USD</td>
<td>1109</td>
<td>1108</td>
<td>0.2415</td>
</tr>
<tr>
<td rowspan=3>DEF</td>
<td rowspan='3'>3</td>
<td>6490</td>
<td>17878</td>
<td>CURRENCY EXCHANGE</td>
<td rowspan=2>CAD</td>
<td>11.6</td>
<td>7.9</td>
<td>-0.5</td>
</tr>
<tr>
<td colspan>C036490</td>
<td>U78</td>
<td>CURRENCY EXCHANGE1</td>
<td>20.57</td>
<td>27.9</td>
<td>-0.2625</td>
</tr>
<tr>
<td colspan>C036490</td>
<td>31B3078</td>
<td>CURRENCY EXCHANGE</td>[enter image description here][1]
<td>USD</td>
<td>0.57</td>
<td>2.1</td>
<td>-0.25</td>
</tr>
</table>
</html>
У меня возникли некоторые проблемы при этом.
Моя логика в настоящее время состоит в том, чтобы найти столбцы агрегатора и создать итоговый столбец после этого индекса агрегатора, и выполнить его «жесткое кодирование».Прошу прощения за качество, так как я быстро его нарисовал.
def add_data_rows_to_tables(html_code,pivot_pos,length,style,aggregate_on):
if length == 1:
html_code += row_start + style + '>'
for index, row in pivot_pos.iterrows():
for all in pivot_pos.columns.tolist():
html_code += '<td>%s</td>' % row[all]
html_code += row_end
else:
html_code += row_start + style + '>'
first = pivot_pos.iloc[0]
for all in pivot_pos.columns.tolist():
if all != aggregate_on and all != 'Total for %s'%aggregate_on:
html_code += '<td>%s</td>' % first[all]
if all == aggregate_on:
html_code += '<td rowspan=%d>%s</td>' % (length, pivot_pos[aggregate_on].iloc[0])
if all == 'Total for %s'%aggregate_on:
html_code += '<td rowspan=%d>%s</td>' % (length, length)
if all == 'Ccy':
html_code += '<td rowspan=%d>%s</td>' % (length, length)
html_code += row_end
for i in range(1,length):
html_code += row_start + style + '>'
for all in pivot_pos.columns.tolist():
if all != aggregate_on and all != 'Total for %s'%aggregate_on:
html_code += '<td>%s</td>' % pivot_pos[all].iloc[i]
html_code += row_end
return html_code
Однако это не очень хорошо работает при добавлении нескольких столбцов для агрегирования / охвата, и у меня возникают проблемы с правильным рекурсивным вызовом, так как интервалыдолжны быть установлены заранее (или, может быть, я неправильно понимаю).
Пожалуйста, дайте мне знать, если у вас, ребята, есть какие-либо советы по этому поводу.Заранее спасибо!