Callbacks through more than two dropdowns

I want to build an app where 3 inputs are dependant on one another. I get 1 (tab) and 2 (group) two show the desired results, however 3 (subgroup) always shows more results than possible.

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd

df = pd.read_csv('M:\dashApp\df.csv', sep = ',', index_col = False)
#all_options = df.to_dict()

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
            dcc.Dropdown(
                id = 'tab_dropdown',
                options=[{'label' : k, 'value' : k} for k in df.tab.unique()],
                value = 'crop'
            ),
            html.Hr(),

            dcc.Dropdown(id = 'group_dropdown'),
            html.Hr(),

            dcc.Dropdown(id = 'subgroup_dropdown'),
            html.Hr(),

            html.Div(id='display_selected_values')
])

@app.callback(
    Output('group_dropdown', 'options'),
    [Input('tab_dropdown', 'value')])
def set_group_options(selected_tab):
    return[{'label': i, 'value': i} for i in df.group[df.tab == selected_tab].unique()]

@app.callback(
    Output('group_dropdown', 'value'),
    [Input('group_dropdown', 'options')])
def set_group_values(availabe_options):
    return availabe_options[0]['value']

@app.callback(
    Output('subgroup_dropdown', 'options'),
    [Input('group_dropdown', 'value')])
def set_subgroup_options(selected_group):
    return[{'label': j, 'value': j} for j in df.subgroup[df.group == selected_group].unique()]

@app.callback(
    Output('subgroup_dropdown', 'value'),
    [Input('subgroup_dropdown', 'options')])
def set_subgroup_values(availabe_sub_options):
    return availabe_sub_options[0]['value']

@app.callback(
    Output('display_selected_values', 'children'),
    [Input('tab_dropdown', 'value'),
     Input('group_dropdown', 'value'),
     Input('subgroup_dropdown', 'value')])
def set_display_children(selected_tab, selected_group, selected_subgroup):
    return 'you have selected {} and {} option {}'.format(
        selected_tab, selected_group, selected_subgroup
        )

if __name__ == '__main__':
    app.run_server(debug=True)

I managed to get it running.

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd

df = pd.read_csv('M:\dashApp\df_tsynops.csv', sep = ',', index_col = False)
#all_options = df.to_dict()

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
            dcc.Dropdown(
                id = 'tab_dropdown',
                options=[{'label' : k, 'value' : k} for k in df.tab.unique()],
                value = 'crop'
            ),
            html.Hr(),

            dcc.Dropdown(id = 'group_dropdown'),
            html.Hr(),

            dcc.Dropdown(id = 'subgroup_dropdown'),
])

#### group_dropdown
@app.callback(
    Output('group_dropdown', 'options'),
    [Input('tab_dropdown', 'value')])
def set_group_options(selected_tab):
    return[{'label': i, 'value': i} for i in\
    sorted(df.group[df.tab == selected_tab].unique())]

@app.callback(
    Output('group_dropdown', 'value'),
    [Input('group_dropdown', 'options')])
def set_group_values(availabe_options):
    return availabe_options[0]['value']

#### subgroup_dropdown
@app.callback(
    Output('subgroup_dropdown', 'options'),
    [Input('tab_dropdown', 'value'),
    Input('group_dropdown', 'value')])
def set_subgroup_options(selected_tab, selected_group):
    return[{'label': i, 'value': i} for i in\
    sorted(df.subgroup[df.tab == selected_tab][df.group == selected_group].unique())]

@app.callback(
    Output('subgroup_dropdown', 'value'),
    [Input('subgroup_dropdown', 'options')])
def set_subgroup_values(availabe_options):
    return availabe_options[0]['value']

if __name__ == '__main__':
    app.run_server(debug=True)