我想根據groupby列上 df 的結果中的值過濾資料框。例如,如果我有一個帶有 的資料框columns := ticker, year, price,我想過濾掉第一年 >= 1990 的 df 代碼。
或更技術上來說,股票代碼在df.groupby('ticker').['year'].min() < 1990
我目前正在這樣做:
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 行中做起來感覺有點笨拙,而且似乎不能很好地擴展到更大的資料集。
是否有任何資料框方法可以更有效地完成此任務?
uj5u.com熱心網友回復:
做就是了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)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496109.html
