[英]Python Dash: Return subset of a data frame using drop-down menu
我有一個包含一些商品交易的數據框。 我的目標是使用 Dash 下拉菜單顯示此數據框的子集。 下面是我用來顯示整個數據框的代碼:
from dash import Dash, dash_table
import pandas as pd
parquet_file = r'/home/maanan/sevencommodities/random_deals.parq'
df = pd.read_parquet(parquet_file, engine='auto')
app = Dash(__name__)
app.layout = dash_table.DataTable(df.to_dict('records'), [{"name": i, "id": i} for i in df.columns])
if __name__ == '__main__':
app.run_server(debug=False, port=5950)
它返回下表:
但是,我不想展示所有內容,例如; 變量book
包含以下級別:
bk = pd.Categorical(df['book'])
print(bk.categories)
Index(['Book_1', 'Book_2', 'Book_3', 'Book_4', 'Book_5', 'Book_6', 'Book_7'], dtype='object')
我只想顯示一個級別的數據框,即用戶將選擇的級別。
我對 Python Dash 真的很陌生,如果有人能給我提示如何解決這個問題,我將不勝感激。 先感謝您。
編輯
以下是df.info()
的輸出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100000 entries, 0 to 99999
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 deal_id 100000 non-null int64
1 book 100000 non-null object
2 counterparty 100000 non-null object
3 commodity_name 100000 non-null object
4 commodity_code 100000 non-null object
5 executed_date 100000 non-null datetime64[ns, Europe/Prague]
6 first_delivery_date 100000 non-null datetime64[ns, Europe/Prague]
7 last_delivery_date 100000 non-null datetime64[ns, Europe/Prague]
8 last_trading_date 100000 non-null datetime64[ns, Europe/Prague]
9 volume 100000 non-null int64
10 buy_sell 100000 non-null object
11 trading_unit 100000 non-null object
12 tenor 100000 non-null object
13 delivery_window 100000 non-null object
14 strategy 3847 non-null object
dtypes: datetime64[ns, Europe/Prague](4), int64(2), object(9)
memory usage: 11.4+ MB
您可以讓用戶指定一個user_chosen_book
,然后過濾 DataFrame 以僅包含該書的記錄。
df = pd.read_parquet(parquet_file, engine='auto')
user_chosen_book = 'Book_2'
df = df[df['book'] == user_chosen_book]
現在您已經准備好將原始 df 的一個子集加載到您的應用程序中
我會推薦isin
,以防用戶想要多個輸入
user_chosen_book = ['Book_2','Book_1']
out = df[df['book'].isin(user_chosen_book)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.