gpt4 book ai didi

python - 使用回调函数更新破折号数据表

转载 作者:行者123 更新时间:2023-12-04 04:21:23 24 4
gpt4 key购买 nike

我有一个我构建的仪表板。我想添加更多的交互性。我想允许用户在下拉菜单中选择一个选项,并且我的数据表中显示的数据根据​​所述选择进行过滤

这就是我定义数据表的方式

html.Div([
dash_table.DataTable(
id='punchstats',
columns=[{'name': i, 'id': i} for i in punch_stats.columns],
data = punch_stats.to_dict('records'),
page_current=0,
page_size=2,
page_action='custom',
sort_action='custom',
sort_mode='multi',
style_table={'overflowX':'scroll',
'maxHeight':'300px'},
style_header={'backgroundColor':'rgb(30, 30, 30)'},
style_cell={'backgroundColor':'rgb(50,50,50)',
'color':'white'},
sort_by=[]),
])

这些是我定义的下拉过滤器
dcc.Dropdown(
id='weight_class',
options=[{'label': i, 'value': i} for i in data['division'].unique()],
multi=True
),
dcc.Dropdown(
id='gender',
options=[{'label': i, 'value':i} for i in fight_outcomes['sex'].unique()],
multi=True
),

这是应该根据下拉选择更新我的表格的功能
@app.callback(
dash.dependencies.Output('punchstats','data'),
[dash.dependencies.Input('punchstats','page_current'),
dash.dependencies.Input('punchstats','page_size'),
dash.dependencies.Input('punchstats','sort_by'),
dash.dependencies.Input('weight_class','value'),
dash.dependencies.Input('gender','value')])
def update_punchstats(page_current,page_size,sort_by,weight_class,gender):
if weight_class is None or weight_class == []:
weight_class == WEIGHT_CLASS
if gender is None or gender == []:
gender == GENDER
punchstatsdf = [(punch_stats['division'].isin(weight_class))]
punchstatsdf = [(punchstatsdf['sex'].isin(gender))]
print(sort_by)
if len(sort_by):
sorted_df = punchstatsdf.sort_values(
[cols['column_id'] for cols in sort_by],
ascending=[
cols['direction'] == 'asc'
for col in sort_by
],
inplace=False
)
else:
sorted_df = punchstatsdf
return sorted_df.iloc[page_current*page_size:(page_current+ 1)*page_size].to_dict('records')

不确定如何为此类问题添加最小的可重现示例,希望对这个包有更多经验的人可以发现函数逻辑有问题。

只是重申这个问题。当我选择给定的体重等级和/或性别时,数据表不会过滤特定于所选体重等级/性别的数据

更新

通过研究,我发现为了允许用户按列排序,我必须将 sort_action 更改为 native,因为自定义意味着我必须自己指定排序操作。但是,我仍在努力让用户根据下拉选择过滤出现在数据表中的数据。

这是我更新的代码。我还补充道:
html.Div([
dash_table.DataTable(
id='punchstats',
columns=[{'name': i, 'id': i} for i in sorted(punch_stats.columns)],
# data = punch_stats.to_dict('records'),
page_current=0,
page_size=5,
page_action='native',
sort_action='native',
column_selectable="single",
row_selectable="single",
sort_mode='multi',
style_table={'overflowX':'scroll',
'maxHeight':'300px'},
style_header={'backgroundColor':'rgb(30, 30, 30)'},
style_cell={'backgroundColor':'rgb(50,50,50)',
'color':'white'},
sort_by=[]),
])

和:
@app.callback(
dash.dependencies.Output('punchstats','data'),
[dash.dependencies.Input('weight_class','value'),
dash.dependencies.Input('gender','value')])
def update_punchstats(weight_class,gender):
if weight_class is None or weight_class == []:
weight_class == WEIGHT_CLASS
if gender is None or gender == []:
gender == GENDER
punchstatsdf = [(punch_stats['division'].isin(weight_class))]
punchstatsdf = [(punchstatsdf['sex'].isin(gender))]
return [
punchstatsdf.to_dict('records')
]

我还尝试通过返回字典来更新我的回调函数中的破折号数据表:
def update_punchstats(weight_class,gender):
if weight_class is None or weight_class == []:
weight_class == WEIGHT_CLASS
if gender is None or gender == []:
gender == GENDER
punchstats = [(punch_stats['division'].isin(weight_class))]
punchstats = [(punchstats['sex'].isin(gender))]
return {
'data': punchstats.to_dict("records")
}

但是,这会返回一个空的数据表

这是我正在使用的数据:
path_five = 'https://raw.githubusercontent.com/EmmS21/SpringboardCapstoneBoxingPredictionWebApp/master/boxingdata/punchingstats.csv'
punch_stats = pd.read_csv(path_five)

最佳答案

我让它工作了。这就是我所做的。

首先,我更改了以下几行:

punchstats = [(punch_stats['division'].isin(weight_class))]
punchstats = [(punchstats['sex'].isin(gender))]

对此:

punchstatsdf = punch_stats[punch_stats['division'].isin(weight_class)]
punchstatsdf = punchstatsdf[punchstatsdf['sex'].isin(gender)]

你的变量赋值也有问题。不知道是什么 GENDERWEIGHT_CLASS是,但我假设它们是字符串列表。您需要使用单个 = 进行分配而不是双 == .我也必须这样做。

最后,我只是做了 return punchstatsdf.to_dict('records') .您不需要将它放在列表或字典中。

关于python - 使用回调函数更新破折号数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com