Почему после изменения ползунка в боке TableColumn, содержащий названия мер, исчезает? - PullRequest
0 голосов
/ 12 сентября 2018

Я создал DataTable на основе вывода .describe () с боке, которое обновляется, когда я настраиваю ползунок.Кажется, что все другие столбцы в таблице данных обновляются правильно, однако первый столбец, содержащий имена показателей, исчезает при обратном вызове.То есть заголовок все еще там, однако поле пустое.Как мне исправить это, чтобы столбец меры не стал пустым?

мой код выглядит следующим образом:

def modify_table(doc):

    my_cols = ['Tuition Per Student', 'Students', 'Total Tuition', 'Other Revenue', 'Total Revenue', 'Expense', 'Margin']

    source = ColumnDataSource(ed_montecarlo(department_data, 'Education and Early Childhood', num=1000, expense_var=.3)[my_cols]. \
                          describe().iloc[1:,].round(2))

    columns = [TableColumn(field='index', title='Measure'), 
               TableColumn(field='Tuition Per Student', title='Tuition Per Student'),
               TableColumn(field='Students', title='Number of Students'),
               TableColumn(field='Total Tuition', title='Total Tuition'),
               TableColumn(field='Other Revenue', title='Other Revenue'),
               TableColumn(field='Total Revenue', title='Total Revenue'),
               TableColumn(field='Expense', title='Total Expense'),
               TableColumn(field='Margin', title='Margin')]

    data_table = DataTable(source=source, columns=columns, index_position=None, width=700)

    def callback(attr, old, new):
        other_sims = ed_montecarlo(department_data, 'Education and Early Childhood', num=iter_slider.value, expense_var=.3)[my_cols]
        other_sims_table = other_sims.describe().iloc[1:,].round(2)

        source.data = {
            'Measure'                : list(other_sims_table.index),
            'Tuition Per Student'    : list(other_sims_table['Tuition Per Student']),
            'Students'               : list(other_sims_table['Students']),
            'Total Tuition'          : list(other_sims_table['Total Tuition']),
            'Other Revenue'          : list(other_sims_table['Other Revenue']),
            'Total Revenue'          : list(other_sims_table['Total Revenue']),
            'Expense'                : list(other_sims_table['Expense']),
            'Margin'                 : list(other_sims_table['Margin']),

    }

    iter_slider = Slider(start=100, end=5000, step=100, value=1000, title='Number of Iterations')
    iter_slider.on_change('value', callback) 
    widg = widgetbox(iter_slider)

    doc.add_root(column(widg, data_table))

show(modify_table)     

обратите внимание, что ed_montecarlo - это написанная мною функция, которая возвращает выходные данные из разных итераций моделирования Монте-Карло.Кажется, что все работает, за исключением этого одного столбца.

Вот вывод перед настройкой ползунка: Before Adjusting Slider

А вот вывод после: enter image description here

Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 13 сентября 2018

Я нашел ответ.Проблема была с этим блоком:

    source.data = {
        'Measure'                : list(other_sims_table.index),
        'Tuition Per Student'    : list(other_sims_table['Tuition Per Student']),
        'Students'               : list(other_sims_table['Students']),
        'Total Tuition'          : list(other_sims_table['Total Tuition']),
        'Other Revenue'          : list(other_sims_table['Other Revenue']),
        'Total Revenue'          : list(other_sims_table['Total Revenue']),
        'Expense'                : list(other_sims_table['Expense']),
        'Margin'                 : list(other_sims_table['Margin']),

}

Вместо этого я должен был изменить «Измерение» на «индекс», в результате я создал новый столбец с именем «Измерение», на который затем не ссылались восновная функция.Правильный код будет:

    source.data = {
        'index'                  : list(other_sims_table.index),
        'Tuition Per Student'    : list(other_sims_table['Tuition Per Student']),
        'Students'               : list(other_sims_table['Students']),
        'Total Tuition'          : list(other_sims_table['Total Tuition']),
        'Other Revenue'          : list(other_sims_table['Other Revenue']),
        'Total Revenue'          : list(other_sims_table['Total Revenue']),
        'Expense'                : list(other_sims_table['Expense']),
        'Margin'                 : list(other_sims_table['Margin']),

}
...