Hi! I have a problem with my table:
When the column name contains numbers - its looks like this:
column with the header “jan” was 01 before i renamed it.
My DataTable code:
dcc.Tab(id='profit_tab', label='Прибыль', children=[
dt.DataTable(
# Initialise the rows
rows=[{}],
editable=False,
filterable=True,
sortable=True,
column_widths=[70, 130],
max_rows_in_viewport=50,
row_selectable=True,
selected_row_indices=[],
id='profit'
)
]),
My callback code:
@app.callback(
Output(‘profit’, ‘rows’),
[Input(‘my-dropdown’, ‘value’),
Input(‘month-range-slider’, ‘value’),
Input(‘profit_tab’, ‘label’),
Input(‘my-toggle-switch’, ‘value’)])
def update_output(value, months, tab, sellected_year):
if sellected_year == False:
func = frame_transform(value, months, tab, data_2018).to_dict(‘records’)
else:
func = frame_transform_2019(value, months, tab, data_2019).to_dict(‘records’)
return func
The function:
def frame_transform_2019(value, months, tab, data_base):
if (tab == 'Доходы')|(tab == 'Прибыль'):
data_2019 = data_base.groupby(
['Дата', 'Страна', 'Валюта', 'ID Партнера', 'Партнер', 'Менеджер партнера', "Категория"]
)[['Клики/Всего', 'Клики/Уникальные', 'Лиды/Всего', 'Лиды/Принято', 'Лиды/На проверке', 'Лиды/Отклонено', 'Выплаты', 'Доходы', 'Прибыль']].sum()
elif (tab == 'AR')|(tab == 'CR')|(tab == 'EPL')|(tab == 'EPC'):
data_2019 = data_base.groupby(['Дата', 'Страна', 'Валюта', 'ID Партнера', 'Партнер', 'Менеджер партнера', "Категория"])[['CR', 'AR', 'EPC', 'EPL']].mean()
data_2019 = data_2019.reset_index()
vm_man = data_2019[data_2019['Менеджер партнера'] == value]
vm_man_rev = pd.pivot_table(vm_man,
index=['ID Партнера', 'Партнер', 'Валюта'],
values=tab,
columns='Дата',
fill_value=0)
vm_man_rev = vm_man_rev.astype('int')
lst = vm_man_rev.columns.tolist()
lst = [x[-2:] for x in lst]
vm_man_rev.columns = lst
selcted_month = vm_man_rev.columns[months[0]:months[1]+1]
vm_man_rev = vm_man_rev[selcted_month]
vm_man_rev.rename(index=str, columns={"01":"Jan", "02": "02"}, inplace=True)
vm_man_rev['Итого'] = vm_man_rev.sum(axis=1)
vm_man_rev['Итого'] = vm_man_rev['Итого'].astype('int')
vm_man_rev.replace(0, np.nan, inplace=True)
vm_man_rev.dropna(how='all', inplace=True)
vm_man_rev.replace(np.nan, '', inplace=True)
vm_man_rev.reset_index(inplace=True)
# МЕНЯЕМ ПОРЯДОК СТОЛБЦОВ
lst = vm_man_rev.columns.tolist() # КОЛОНКИ В СПИСОК
lst.append(lst.pop(lst.index('Валюта'))) # СМЕНА ПОРЯДКА (ПОЧИТАТЬ ПРО .pop)
vm_man_rev = vm_man_rev[lst]
vm_man_rev.rename(index=str, columns={"ID Партнера":"ID"}, inplace=True)
vm_man_rev['ID'] = vm_man_rev['ID'].astype('int')
return vm_man_rev
I really need numbers in headers - they represents days of month.
P.S.: Sorry for my poor english