Jupyter Notebook Widgets:创建依赖的下拉列表

时间:2017-08-18 10:24:20

标签: python pandas widget jupyter

我想在我的Jupyter笔记本中创建2个下拉小部件。下拉内容取自数据框。

我们说我的熊猫数据框由3个分类变量' a'''' c'组成。 '一个'有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 个答案:

答案 0 :(得分:4)

我发现了如何做到这一点。我希望这对其他任何想要做同样事情的人都有帮助。

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);