使用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

解决方法

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

from ipywidgets import interact
import pandas as pd

def show_df(value):
    data = [['A','Orange',2],['B','Apple',3],['A',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
)
,

我不特别了解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"创建一个掩码(真值和False值的数据帧),然后可以将该掩码用作索引,以仅获取该掩码为True的值。