![](/img/trans.png)
[英]Most efficient way to groupby => aggregate for large dataframe in pandas
[英]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.