У меня есть набор данных, который выглядит следующим образом:
cat_id author year publisher country value (dollars)
name1 kunga 1998 D and D Australia 10
name2 siba 2001 D and D UK 20
name3 siba 2001 D and D US 20
name3 shevara 2001 D and D UK 10
name3 dougherty 1992 D and D Australia 20
name4 ken 2011 S and K Australia 10
Я хочу превратить это в таблицу с плотной чертой.У меня есть большая часть кода, который я хочу настроить:
#!/usr/bin/env python
import dash
from dash.dependencies import Input, Output, State
import dash_table
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
app = dash.Dash(__name__)
df = pd.read_excel('dash_test_doc.xlsx')
app.layout = html.Div([
html.Div([
dcc.Input(
id='adding-rows-name',
placeholder='Enter a column name...',
value='',
style={'padding': 10},
),
html.Button('Add Column', id='adding-rows-button', n_clicks=0)
], style={'height': 50}),
dash_table.DataTable(
id='adding-rows-table',
columns=[{"name": i, "id": i} for i in df.columns],
data = df.to_dict('rows'),
editable=True,
filtering=True,
sorting=True,
sorting_type="multi",
row_selectable="multi",
row_deletable=True,
selected_rows=[],
pagination_mode="fe",
style_cell_conditional=[
{
'if': {'row_index': 'odd'},
'backgroundColor': 'rgb(230, 255, 230)'
}
] + [
{
'if': {'column_id': c},
'textAlign': 'left'
} for c in ['Date', 'Region']
],
style_header={
'backgroundColor': 'white',
'fontWeight': 'bold'
}
),
html.Button('Add Row', id='editing-rows-button', n_clicks=0),
dcc.Graph(id='adding-rows-graph'),
])
@app.callback(
Output('adding-rows-table', 'data'),
[Input('editing-rows-button', 'n_clicks')],
[State('adding-rows-table', 'data'),
State('adding-rows-table', 'columns')])
def add_row(n_clicks, rows, columns):
if n_clicks > 0:
rows.append({c['id']: '' for c in columns})
return rows
@app.callback(
Output('adding-rows-table', 'columns'),
[Input('adding-rows-button', 'n_clicks')],
[State('adding-rows-name', 'value'),
State('adding-rows-table', 'columns')])
def update_columns(n_clicks, value, existing_columns):
if n_clicks > 0:
existing_columns.append({
'id': value, 'name': value,
'editable_name': True, 'deletable': True
})
return existing_columns
@app.callback(
Output('adding-rows-graph', 'figure'),
[Input('adding-rows-table', 'data'),
Input('adding-rows-table', 'columns')])
def display_output(rows, columns):
return {
'data': [{
'type': 'heatmap',
'z': [[row.get(c['id'], None) for c in columns] for row in rows],
'x': [c['name'] for c in columns]
}]
}
if __name__ == '__main__':
app.run_server(debug=True)
Есть только три вещи, с которыми я борюсь, если кто-то может помочь, я был бы признателен:
Я хочу создать раскрывающееся меню для каждого столбца без предварительного определения параметров раскрывающегося списка и возможности множественного выбора.например, используя таблицу здесь, в издателе, есть два варианта (D и D, и S и K);я хочу, чтобы они автоматически отображались как выпадающий параметр для фильтрации, без необходимости жестко их кодировать, потому что, например, если я редактирую таблицу ввода и добавляю строку, и есть еще один добавленный издатель (например, A и D), я хочу Aа D будет автоматически добавляться в выпадающие опции?(в конечном счете, идея будет заключаться в том, чтобы имитировать Excel, где я мог бы выбрать из раскрывающегося списка, например, D и D, а также S и K из раскрывающегося списка для этого столбца, и записи будут отфильтрованы на основе этого).
возможно ли выделить несколько строк и удалить их одним действием?в минуту я могу удалить отдельные строки.
Можно ли экспортировать таблицу?скажем, я читаю в таблице, а затем кто-то удаляет некоторые столбцы / строки, могу ли я экспортировать полученную таблицу?
Если кто-нибудь может помочь мне выяснить код для них, я быценить это.Как примечание: поскольку я только начинаю, если у кого-то есть какие-либо предложения по улучшению этого скрипта, я буду признателен.