Dash: Pandas фильтрация строк

Имею следующий код:

@app.callback(
    dash.dependencies.Output('table_', 'children'),
    dash.dependencies.Input('dropdown', 'value'),
    dash.dependencies.Input('dropdown1', 'value'),
    dash.dependencies.Input('dropdown2', 'value'))
def display_table(dropdown_value, dropdown_value1, dropdown_value2):
    if dropdown_value is None and dropdown_value1 is None and dropdown_value2 is None:
        return generate_tb(df)
    if dropdown_value is not None and dropdown_value1 is not None:
        dff = df.loc[(df.country.astype(str).str.contains('|'.join(str(v) for v in dropdown_value))) &
                     (df['product'].astype(str).str.contains('|'.join(str(v) for v in dropdown_value1)))]
        return generate_tb(dff)
    if dropdown_value is not None and dropdown_value2 is not None:
        dff = df.loc[(df.country.astype(str).str.contains('|'.join(str(v) for v in dropdown_value))) &
                     (df.choice.astype(str).str.contains('|'.join(str(v) for v in dropdown_value2)))]
        return generate_tb(dff)
    if dropdown_value1 is not None and dropdown_value2 is not None:
        dff = df.loc[(df['product'].astype(str).str.contains('|'.join(str(v) for v in dropdown_value1))) &
                     (df.choice.astype(str).str.contains('|'.join(str(v) for v in dropdown_value2)))]
        return generate_tb(dff)
    if dropdown_value is not None and dropdown_value1 is not None and dropdown_value2 is not None:
        dff = df.loc[(df.country.astype(str).str.contains('|'.join(str(v) for v in dropdown_value))) &
                     (df['product'].astype(str).str.contains('|'.join(str(v) for v in dropdown_value1))) &
                     (df.choice.astype(str).str.contains('|'.join(str(v) for v in dropdown_value2)))]
        return generate_tb(dff)
    if dropdown_value is not None:
        dff = df.loc[df.country.astype(str).str.contains('|'.join(str(v) for v in dropdown_value))]
        return generate_tb(dff)
    if dropdown_value2 is not None:
        dff = df.loc[df.choice.astype(str).str.contains('|'.join(str(v) for v in dropdown_value2))]
        return generate_tb(dff)
    if dropdown_value1 is not None:
        dff = df.loc[df['product'].astype(str).str.contains('|'.join(str(v) for v in dropdown_value1))]
        return generate_tb(dff)

исходный df имеет следующий вид:

country | product |choice
  qwe      rty      yui
  asd      fgh      fgt

переменные dropdown_value, dropdown_value1, dropdown_value2собираются из выпадающего списка, соответсвенно в переменных может быть выбрано одно значение или несколько, на данный момент сталкиваюсь с проблемой при фильтрации с использованием dropdown2 в связки с остальными не срабатывает, просьба подсказать в чем может быть проблема? Также, есть ли еще какие варианты для реализации подобного функицонала? Спасибо!


Ответы (0 шт):