使用自定义聚合函数提高 pandas groupby 的效率

increase efficiency of pandas groupby with custom aggregation function

我有一个不太大的数据框(就形状而言在 2000x10000 范围内)。

我正在尝试 groupby 列,并对前 N 个非空条目进行平均:

例如

def my_part_of_interest(v,N=42):
   valid=v[~np.isnan(v)]
   return np.mean(valid.values[0:N])

mydf.groupby('key').agg(my_part_of_interest)

现在需要很长时间(十几分钟),当.agg(np.nanmean) 而是以秒为单位。

如何运行更快地获得它?

需要考虑的一些事项:

  1. 通过单个操作在整个 df 上删除 nan 条目比在分组数据集块上这样做更快 mydf.dropna(subset=['v'], inplace=True)
  2. 使用.head 切片mydf.groupby('key').apply(lambda x: x.head(42).agg('mean')

我认为这些组合可以优化一些东西,而且它们更符合 pandas。