三行代码  ›  专栏  ›  技术社区  ›  Brian Barry

Pandas基于groupby掩码过滤数据帧的最有效方法

  •  0
  • Brian Barry  · 技术社区  · 1 月前

    我想根据df中的值过滤数据帧 groupby 列上的结果。例如,如果我有一个带有 columns := ticker, year, price ,我想筛选出第一年为>=1990

    或者更严格地说,在 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
    

    然而,用三行代码来做这件事感觉有点笨拙,而且对于更大的数据集来说,扩展性似乎不太好。

    是否有任何数据帧方法可以更有效地实现这一点?

    1 回复  |  直到 1 月前
        1
  •  3
  •   BENY    1 月前

    就这么做吧 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)]