簡體   English   中英

Pandas 基於 groupby 掩碼過濾數據幀的最有效方法

[英]Pandas most efficient way to filter dataframe based on groupby mask

我想根據列上 df 的groupby結果中的值過濾數據框。 例如,如果我有一個包含columns := ticker, year, price的數據框,我想過濾掉第一年 >= 1990 的 df 代碼。

或者從技術上講,代碼在df.groupby('ticker').['year'].min() < 1990中評估為 True

我目前正在這樣做:

ticker_min_date_bool = df.groupby('ticker')['year'].min() < 1990 # get booleans
tickers_filt = [i for i in ticker_min_date_bool.index if ticker_min_date_bool[i]] # make list of tickers with criteria
df_new = df[df.ticker.isin(tickers_filt)] # filter df based on above list

然而,這在 3 行中做起來感覺有點笨拙,而且似乎不能很好地擴展到更大的數據集。

是否有任何數據框方法可以更有效地完成此任務?

只做transform

ticker_min_date_bool = df.groupby('ticker')['year'].transform('min') < 1990
df_new = df[ticker_min_date_bool]

或者沒有groupby

s = df.loc[df['year']<1990,'ticker']
df_new = df[df['ticker'].isin(s)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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