簡體   English   中英

Python Dash:使用下拉菜單返回數據框的子集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM