Select 下拉值而不是滑块值来过滤 Dataframe 中的行
Select dropdown value instead of slider value to filter rows in Dataframe
使用 plotly 中的破折号,我想按两列过滤函数中的数据框,使用一列中滑块的值和另一列下拉列表中的值。您如何区分脚本中的两个“值”变量以过滤数据帧?
这是我目前所拥有的
app.layout = html.Div([
dcc.Graph(id='chart-with-slider'),
dcc.Dropdown(id='dropdown', options=[
{'label':i, 'value': i} for i in df['Name'].unique()
],
value=value[0],
multi=False,
clearable=False,
placeholder='Choose Drug'),
dcc.RangeSlider(
id='quarter-slider',
min=numdate[0],
max=numdate[-1],
value=[numdate[0], numdate[-1]],
marks={numd:date.strftime('%b%Y') for numd,date in zip(numdate, df['Quarter'].dt.date.unique())},
step=None
)
])
@app.callback(
Output('chart-with-slider', 'figure'),
Output('table-container', 'children'),
Input('dropdown', 'value'),
Input('quarter-slider', 'value'))
def update_figure(value, dropdown.value):
global df
dfPats = df.loc[(df['fQtr'] == value[0]) & df['Name'] == dropdown.value[0],
['PatientNum']]'''
如您所见,我尝试了以下内容,但正如我所怀疑的那样,没有这样的语法。
dropdown.value[0]
导致 Output('table-container', 'children')
输出错误的更新脚本如下:
dcc.Graph(id='chart-with-slider'),
dcc.Dropdown(id='dropdown', options=[
{'label':i, 'value': i} for i in df['NDCName'].unique()
],
multi=False,
clearable=False,
placeholder='Choose Drug'),
html.Div(id='table-container'),
dcc.RangeSlider(
id='quarter-slider',
min=numdate[0],
max=numdate[-1],
value=[numdate[0], numdate[-1]],
marks={numd:date.strftime('%m%Y') for numd,date in zip(numdate, df['Quarter'].dt.date.unique())},
step=None
)
])
@app.callback(
Output('chart-with-slider', 'figure'),
Output('table_container', 'children'),
Input('dropdown', 'value'),
Input('quarter-slider', 'value'))
def update_figure(dropdown_value, slider_value):```
输入(和状态)根据输入的数量和顺序对应于回调函数中的参数 and/or 状态。
参数的名称不必与它映射到的 属性 或 ID 对应。它可以是任何你想要的,只要它遵循参数的 Python 语法规则。
参数名称中不能包含 .
(例如:dropdown.value
)。那是无效的语法。
您也可以这样做:
@app.callback(
Output("chart-with-slider", "figure"),
Output("table-container", "children"),
Input("dropdown", "value"),
Input("quarter-slider", "value"),
)
def update_figure(dropdown_value, slider_value):
# Do something...
第一个输入对应第一个函数参数,第二个输入对应第二个函数参数,依此类推...
使用 plotly 中的破折号,我想按两列过滤函数中的数据框,使用一列中滑块的值和另一列下拉列表中的值。您如何区分脚本中的两个“值”变量以过滤数据帧?
这是我目前所拥有的
app.layout = html.Div([
dcc.Graph(id='chart-with-slider'),
dcc.Dropdown(id='dropdown', options=[
{'label':i, 'value': i} for i in df['Name'].unique()
],
value=value[0],
multi=False,
clearable=False,
placeholder='Choose Drug'),
dcc.RangeSlider(
id='quarter-slider',
min=numdate[0],
max=numdate[-1],
value=[numdate[0], numdate[-1]],
marks={numd:date.strftime('%b%Y') for numd,date in zip(numdate, df['Quarter'].dt.date.unique())},
step=None
)
])
@app.callback(
Output('chart-with-slider', 'figure'),
Output('table-container', 'children'),
Input('dropdown', 'value'),
Input('quarter-slider', 'value'))
def update_figure(value, dropdown.value):
global df
dfPats = df.loc[(df['fQtr'] == value[0]) & df['Name'] == dropdown.value[0],
['PatientNum']]'''
如您所见,我尝试了以下内容,但正如我所怀疑的那样,没有这样的语法。
dropdown.value[0]
导致 Output('table-container', 'children')
输出错误的更新脚本如下:
dcc.Graph(id='chart-with-slider'),
dcc.Dropdown(id='dropdown', options=[
{'label':i, 'value': i} for i in df['NDCName'].unique()
],
multi=False,
clearable=False,
placeholder='Choose Drug'),
html.Div(id='table-container'),
dcc.RangeSlider(
id='quarter-slider',
min=numdate[0],
max=numdate[-1],
value=[numdate[0], numdate[-1]],
marks={numd:date.strftime('%m%Y') for numd,date in zip(numdate, df['Quarter'].dt.date.unique())},
step=None
)
])
@app.callback(
Output('chart-with-slider', 'figure'),
Output('table_container', 'children'),
Input('dropdown', 'value'),
Input('quarter-slider', 'value'))
def update_figure(dropdown_value, slider_value):```
输入(和状态)根据输入的数量和顺序对应于回调函数中的参数 and/or 状态。
参数的名称不必与它映射到的 属性 或 ID 对应。它可以是任何你想要的,只要它遵循参数的 Python 语法规则。
参数名称中不能包含 .
(例如:dropdown.value
)。那是无效的语法。
您也可以这样做:
@app.callback(
Output("chart-with-slider", "figure"),
Output("table-container", "children"),
Input("dropdown", "value"),
Input("quarter-slider", "value"),
)
def update_figure(dropdown_value, slider_value):
# Do something...
第一个输入对应第一个函数参数,第二个输入对应第二个函数参数,依此类推...