使用自定义聚合函数提高 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)
而是以秒为单位。
如何运行更快地获得它?
需要考虑的一些事项:
- 通过单个操作在整个 df 上删除 nan 条目比在分组数据集块上这样做更快
mydf.dropna(subset=['v'], inplace=True)
- 使用.head 切片
mydf.groupby('key').apply(lambda x: x.head(42).agg('mean')
我认为这些组合可以优化一些东西,而且它们更符合 pandas。
我有一个不太大的数据框(就形状而言在 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)
而是以秒为单位。
如何运行更快地获得它?
需要考虑的一些事项:
- 通过单个操作在整个 df 上删除 nan 条目比在分组数据集块上这样做更快
mydf.dropna(subset=['v'], inplace=True)
- 使用.head 切片
mydf.groupby('key').apply(lambda x: x.head(42).agg('mean')
我认为这些组合可以优化一些东西,而且它们更符合 pandas。