У меня есть df, состоящий из восьми столбцов. Меня интересуют два из них: «Идентификатор» и «Описание». «Id» содержит числовое значение, в то время как «Description» содержит строковые значения (например, «высокая аварийная ситуация», «низкая аварийная ситуация», «зона 1»). Я хотел бы отфильтровать df с помощью выпадающего меню, содержащего выбранный список слов. Например, если в раскрывающемся меню выбраны слова «экстренный», результатом должен быть новый df, отфильтрованный только со строками, которые в столбце «Описание» содержат слово «аварийный».
После фильтрации я хотел бы отобразить количество вхождений оставшихся идентификаторов (подсчитанных с помощью метода value_counts ()) в столбчатой диаграмме, которая обновляется в зависимости от выбранного ключевого слова в раскрывающемся меню.
Я сообщаю здесь код, который я написал до сих пор (df уже импортирован):
import ipywidgets
from bokeh.io import push_notebook
from bokeh.plotting import figure
from bokeh.io import output_notebook, show, reset_output
from bokeh.models import Range1d
output_notebook()
# drop-down widget
drop_down = ipywidgets.Dropdown(options=['emergency',
'zone'],
description='Keyword:'
)
#data. I have problems here because I am passing alarm_count that is defined later in the function
x_bar_data_ipyw = alarm_count.IdAlarm.astype(str)
y_bar_data_ipyw = alarm_count.Count
# figure and plot
bar_chart_interactive = figure(x_range=x_bar_data_ipyw, plot_height=300)
bar_ipyw = bar_chart_interactive.vbar(x_bar_data_ipyw, top=y_bar_data_ipyw, color='green', width=0.5)
bar_chart_interactive.y_range=Range1d(0, 18)
# function - bar chart
def filter(word):
if word == 'emergency':
alarm_count = []
alarm_count = df[df.Description.str.contains(word)].IdAlarm.value_counts().reset_index()
alarm_count.columns = ['IdAlarm','Count']
#alarm_count.sort_values(by = "Count", ascending = False)
elif word == 'zone':
alarm_count = df[df.Description.str.contains(word)].IdAlarm.value_counts().reset_index()
alarm_count.columns = ['IdAlarm','Count']
#alarm_count.sort_values(by = "Count", ascending = False)
push_notebook()
show(bar_chart_interactive, notebook_handle=True)
# interaction
ipywidgets.interact(filter, word=drop_down)
На данный момент я не могу построить отфильтрованный график и, следовательно, я не могу возможность обновления построенного графика. Любое предложение?
РЕДАКТИРОВАТЬ:
Образец моей DF:
Образец DF