我正在努力学习如何创建与数据文件的交互。我已经阅读了Ipywidget 文档,试图尽可能地获取更多的信息,还有一些如何操作的博客,但是当涉及到现实世界时,我无法复制相同的结果。不过,我知道这很常见。
不管怎样,到目前为止我已经试过这样做了:
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]这是相当好的,因为我有一个主要的目标,那就是允许交互。但是,这段代码不允许我更改布局(例如,我更喜欢水平显示小部件)。

所以我从这个新代码开始:
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)问题是,在这种情况下,数据不显示。

增编:
在这里,我们将重新了解一下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)更新
我尝试使用这个新代码,非常类似于我粘贴在这里的第二个代码:
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)即使在记事本中没有呈现dataframe,我也可以在log选项卡中看到它。

发布于 2020-08-06 15:11:40
这是我的解决办法:
output = w`enter code here`idgets.Output()
def crea_opzioni(array):
unique = array.unique().tolist()
unique.sort()
unique.insert(0, "ALL")
return unique
week = [value for value in canali_weekly.index.get_level_values(level=1).unique()]
intRange_week = widgets.IntRangeSlider(value = [max(week)-1, max(week)], min=min(week), max=max(week), step=1, description='Confronto settimane:')
#widgets.Dropdown(options = crea_opzioni(canali_weekly.index.get_level_values(level=1)))
#dropdown_canali = widgets.Dropdown(options = crea_opzioni(canali_weekly.index.get_level_values(level=0)))
def filtra_dati(selezione):
output.clear_output()
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), ["Spending"]]
with output:
display(df)
def dropdown_week_eventhandler(change):
filtra_dati(change.new)
intRange_week.observe(dropdown_week_eventhandler, names='value')
display(intRange_week`enter code here`https://stackoverflow.com/questions/63281573
复制相似问题