Нельзя использовать значение return
функции для фрейма данных, поскольку возвращаемое значение не присваивается чему-либо в основной части кода (оно передается взаимодействию как обратный вызов).Поскольку вы хотите создать совершенно новый фрейм данных (а не модифицировать существующий), простым способом будет использование ключевого слова global
в скопированной версии исходных данных.
После выбора раскрывающихся списков,Вы должны быть в состоянии получить filtered
фрейм данных в ячейке ниже и увидеть влияние фильтров.Если вам нужно что-то более сложное, вы, вероятно, захотите создать объект class
для отслеживания состояния данных, применения фильтров и т. Д.
import ipywidgets as widgets
import pandas as pd
# dummy data
df = pd.DataFrame({'FieldID': ['A', 'A', 'A', 'B', 'B', 'B', 'B'],
'WellnameID':['1_A', '1_A', '2_A', '1_B', '1_B', '2_B', '2_B'],
'value': [1, 2, 3, 4, 5, 6, 7]})
filtered = pd.DataFrame()
output = widgets.Output()
dropdown_field = widgets.Dropdown(options = sorted(df.FieldID.unique()))
dropdown_wellname = widgets.Dropdown(options = sorted(df[df.FieldID==dropdown_field.value].WellnameID.unique()))
def common_filtering(field, wellname):
global filtered
output.clear_output()
filtered = df[(df.FieldID == field) & (df.WellnameID == wellname)]
with output:
display(filtered)
def dropdown_field_eventhandler(change):
common_filtering(change.new, dropdown_wellname.value)
def dropdown_wellname_eventhandler(change):
common_filtering(dropdown_field.value, change.new)
dropdown_field.observe(dropdown_field_eventhandler, names='value')
dropdown_wellname.observe(dropdown_wellname_eventhandler, names='value')
input_widgets = widgets.HBox([dropdown_field, dropdown_wellname])
display(input_widgets)
display(output)