#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. Спасибо. Я рассматривал это с точки зрения виджета.