динамически генерировать HTML-таблицы со строками / гнездами - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу создавать 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

Однако это не очень хорошо работает при добавлении нескольких столбцов для агрегирования / охвата, и у меня возникают проблемы с правильным рекурсивным вызовом, так как интервалыдолжны быть установлены заранее (или, может быть, я неправильно понимаю).

Пожалуйста, дайте мне знать, если у вас, ребята, есть какие-либо советы по этому поводу.Заранее спасибо!

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, что я попытаюсь сделать, это предварительно обработать / предварительно вычислить возможные гнезда и соответствующие им значения диапазона строк в матрице для каждой комбинации категорий.А затем, при создании таблицы, ищите промежутки строк для каждой строки данных, возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...