Jupyter Notebook小部件:创建依赖下拉菜单

13
我想在我的Jupyter Notebook中创建两个下拉式小部件,下拉式小部件的内容来自数据框。
假设我有一个由3个类别变量'a','b','c'组成的Pandas数据框。 'a'有3种子类型'a1','a2'和'a3'。 'b'和'c'与'a'类似,它们也有自己的子类型。 我想创建2个下拉式小部件:第一个下拉式小部件将具有['a','b','c'],第二个下拉式小部件将根据用户为第一个小部件选择的变量来显示子类型。
我真的不知道如何做到这一点。我将尝试为此编写一些代码:
import pandas as pd
from IPython.display import *
import ipywidgets as widgets
from ipywidgets import *

# Create the dataframe
df = pd.DataFrame([['a1','a2','a3'],
             ['b1','b2','b3'],
             ['c1','c2','c3']], index = ['a','b','c']).transpose()

# Widgets
widget1 = Dropdown(options = ['a','b','c'])
display(widget1)
widget2 = Dropdown(???????)
display(widget2)

根据我为这两个下拉框选择的选项,我希望执行某些函数。

非常感谢任何帮助。

1个回答

26

我找到了如何做到这一点。我希望这对于其他也在寻找同样方法的人有所帮助。

x_widget = Dropdown(options = ['a','b','c'])
y_widget = Dropdown()

# Define a function that updates the content of y based on what we select for x
def update(*args):
    y_widget.options = df[x_widget.value].unique().tolist()
x_widget.observe(update)

# Some function you want executed
def random_function():
...

interact(random_function,
         x = x_widget,
         y = y_widget);

我遇到了一个类似的情况,我的第二个下拉菜单选项取决于第一个下拉菜单的值。我一直在尝试找到一个合适的方法来解决这个问题。你的答案非常接近我所需要的。非常感谢! - RandomWalker
2
相关文档部分:https://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html#Arguments-that-are-dependent-on-each-other - Sterling
你如何防止 y_widget 方法执行? - MadmanLee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接