Фильтрация фрейма данных pandas с использованием ipywidgets

#python #pandas #ipywidgets

#python #pandas #ipywidgets

Вопрос:

Я использую выпадающий виджет для значений в одном из столбцов моего фрейма данных. На основе значения, которое я выбираю в выпадающем списке, я хочу, чтобы фрейм данных фильтровал только эти строки. Затем я бы продолжил использовать отфильтрованный фрейм данных для своего анализа.

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

У меня был бы выпадающий список (с использованием ipywidgets) для col2, и когда я выбираю Apple , я хочу получить результирующий фрейм данных.

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

Ответ №1:

Здесь показан фрукт, который вы выбираете из выпадающего меню. Я бы посоветовал вам посмотреть запись 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
)
  

Комментарии:

1. Спасибо! Второй — это то, как я это делаю, но это просто создало бы выпадающий список со значениями. Я ищу способ связать это с фреймом данных.

2. Первый был тем, что я искал. Спасибо!

Ответ №2:

Я не знаю конкретно об 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
  

По сути, вы создаете маску (фрейм данных со значениями True и False) с помощью df["col2"] == "Apple" , а затем вы можете использовать эту маску в качестве индекса, чтобы получать только те значения, где маска истинна.

Комментарии:

1. Спасибо. Я рассматривал это с точки зрения виджета.