为破折号中的多项选择提取 df (pandas)

Extract df for multi choices in dash (pandas)

我正在使用 plotly 创建一个仪表板。我有一个冗长的代码。我在下面添加了一段错误。

@app.callback(
    Output(component_id='bar1', component_property='figure'),
    Input(component_id='bank_dd', component_property='value'))


def update_figure(selected_bank):
    filter = vault['Bank']==selected_bank
    filtered_bank = vault[vault['Bank'].apply(lambda x: x == selected_bank)]
    fig = px.bar(filtered_bank, x='Bank', y='Bundles')

    return fig

当我在下拉菜单中使用 multi = False 时,仪表板工作正常。每当我将选项设置为 True 时,代码都会引发以下错误。

ValueError: Lengths must match to compare

下拉代码如下。

c_bank = vault['Bank'].unique()
cb_banks = dcc.Dropdown(id='bank_dd',
    options=[{"label": bank, "value": bank} for bank in c_bank],
    multi=True,
    placeholder="Select a Bank",
    style={'width':'500px','margin':'5px'}) 

我想问题出在过滤数据上。但是我想不通。

这与 dash 包有关。当您使用多下拉列表时,回调会在您的函数中输入一个列表,其中包含选定的银行名称。而您的 pandas 过滤器认为,您想将该系列与列表的值(按行)进行比较,而不是对其进行子集化。 (顺便说一句。你甚至没有使用过滤器系列,filtered_bank 对于简单的子集任务来说有点过于复杂)

我更愿意做:

def update_figure(selected_bank):

    filtered_bank = vault[vault['Bank'].isin(selected_bank)]

    fig = px.bar(filtered_bank, x='Bank', y='Bundles')

    return fig