使用 ipywidgets 过滤 pandas 数据框

Filtering pandas dataframe using ipywidgets

我正在为我的数据框中的一列中的值使用下拉小部件。根据我在下拉列表中选择的值,我希望数据框仅过滤那些行。然后我会继续使用过滤后的数据框进行分析。

col1 |  col2    |  col3
  A  |   Orange | 2
  B  |   Apple  | 3
  A  |   Apple  | 4

我会为 col2 设置一个下拉列表(使用 ipywidgets),当我选择 Apple 时,我想获得结果数据框。

col1  | col2   | col3
  B   |  Apple | 3
  A   |  Apple | 4

我不太了解 ipywidgets,但假设您可以获得您选择的值,比如“Apple”,按列值过滤掉就很容易了。

df = pd.DataFrame({"col1": ["A", "B", "A"],
               "col2": ["Orange", "Apple", "Apple"],
               "col3": [2, 3, 4]})

df = df[df["col2"] == "Apple"]

然后,当你打印df时,你会得到

  col1   col2  col3
1    B  Apple     3
2    A  Apple     4

基本上,您通过 df["col2"] == "Apple" 创建一个掩码(真值和假值的数据框),然后您可以将该掩码用作索引,以仅获取掩码为真的值。

这会显示您 select 从下拉菜单中选择的水果。如果您想了解有关小部件的更多信息,我建议您观看 Scipy 2020 年关于交互式小部件的记录。

from ipywidgets import interact
import pandas as pd

def show_df(value):
    data = [['A', 'Orange', 2],['B', 'Apple', 3],['A', 'Apple', 4]]
    df = pd.DataFrame(data, columns=['Letter','Fruit','Number'])
    print(df[df.Fruit==value])

interact(show_df, value = ['Apple','Orange'])

有更多专门的方法来创建下拉菜单,但这行得通。比如在这个例子中:

import ipywidgets as widgets
widgets.Select(
    options=['Linux', 'Windows', 'OSX'],
    value='OSX',
    # rows=10,
    description='OS:',
    disabled=False
)