Я пытаюсь научиться создавать взаимодействия с фреймворком данных. Я уже читал Ipywidget do c, пытаясь получить как можно больше, плюс несколько блогов с практическими рекомендациями, но когда дело доходит до реального мира, почему-то я не могу воспроизвести те же результаты. Хотя я знаю, что это обычное дело.
В любом случае, пока я пробовал это сделать:
week = [value for value in canali_weekly.index.get_level_values(level=1).unique()]
values = [value for value in canali_weekly.columns]
@widgets.interact(
x = widgets.IntSlider(min=0, max=canali_weekly["Self"].max(), step=10, description='N. Self minime vendute:'),
s = widgets.IntRangeSlider(
value = [max(week)-1, max(week)],
min=min(week),
max=max(week),
step=1,
description='Confronto settimane:'
),
m = widgets.SelectMultiple(
options=values,
#rows=10,
description='Metriche:',
disabled=False
)
)
def filtra(x,s,m):
return canali_weekly.loc[ (canali_weekly["Self"] > x,s), m]
Что очень хорошо, потому что я достигаю главной цели - разрешить взаимодействия. Однако этот код не позволяет мне изменять макет (например, я бы предпочел отображать виджеты по горизонтали).
So I started with this new code :
week = [value for value in canali_weekly.index.get_level_values(level=1).unique()]
s = widgets.IntRangeSlider(
value = [max(week)-1, max(week)],
min=min(week),
max=max(week),
step=1,
description='Confronto settimane:'
)
def filtra(s):
display(canali_weekly.loc[ (slice(None),s), ["Spending"]])
s.observe(filtra, 'value')
display(s)
The problem is that in this case the dataframe is not shown.
ADDENDUM:
Here a repr of how is the dataframe:
channel = ["A", "B", "C", "D"]
week = [1,2,3,4,5,6,7,8,9]
columns = ["col1","col2","col3"]
index = pd.MultiIndex.from_product([channel,week], names=('channel', 'week'))
df = pd.DataFrame(np.random.randn(36, 3), columns=columns, index=index)
UPDATE:
I tried with this new code, very similar to second one I pasted here:
def crea_opzioni(array):
unique = array.unique().tolist()
unique.sort()
unique.insert(0, "ALL")
return unique
dropdown_week = widgets.Dropdown(options = crea_opzioni(canali_weekly.index.get_level_values(level=1)))
def filtra_dati(change):
if (change.new == "ALL"):
display(canali_weekly)
else:
display(canali_weekly.loc[(slice(None), change.new), ["Spending"]])
dropdown_week.observe(filtra_dati, names='value')
display(dropdown_week)
Even though the dataframe is not rendered in the noteboook, I can see it in the log tab
введите описание изображения здесь