использование ipywidgets SelectMultiple на фрейме данных - PullRequest
1 голос
/ 05 февраля 2020
import pandas as pd
import numpy as np
import ipywidgets as widgets
from IPython.display import display 

a = ['Banking', 'Auto', 'Life', 'Electric', 'Technology', 'Airlines', 
'Healthcare']
df = pd.DataFrame(np.random.randn(7, 4), columns = list('ABCD'))
df.index = a

df.head(7)


dropdown = widgets.SelectMultiple(
                        options=df.index,
                        description='Sector',
                        disabled=False,
                        layout={'height':'100px', 'width':'40%'})
display(dropdown)

Я хочу создать функцию, в которой я могу фильтровать df по секторам. например, я выбираю Авиакомпании, Банки и Electri c на дисплее (выпадающий список), и он возвращает данные только для выбранных секторов.

1 Ответ

0 голосов
/ 06 февраля 2020

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

Вместо использования взаимодействовать Я использовал .observe в виджете выбора.

import pandas as pd
import numpy as np
import ipywidgets as widgets
from IPython.display import display, clear_output

a = ['Banking', 'Auto', 'Life', 'Electric', 'Technology', 'Airlines', 
'Healthcare']
df = pd.DataFrame(np.random.randn(7, 4), columns = list('ABCD'), index=a)

filtered_df = None


dropdown = widgets.SelectMultiple(
                        options=df.index,
                        description='Sector',
                        disabled=False,
                        layout={'height':'100px', 'width':'40%'})

def filter_dataframe(widget):
    global filtered_df
    selection = list(widget['new'])

    with out:
        clear_output()
        display(df.loc[selection])
        filtered_df = df.loc[selection]

out = widgets.Output()
dropdown.observe(filter_dataframe, names='value')
display(dropdown)
display(out)
...