Pandas groupby场景下高效计算每组第n行均值的方案问询
问题核心
你现有代码效率低的核心原因是循环90次重复执行groupby操作,产生了大量不必要的计算开销,仅需1~2次groupby即可完成需求,具体实现分两种场景:
场景1:现有Idx列即为组内位置标识(与你需要的第N行完全对应)
这是效率最高的实现,仅需两次操作:
# 按Idx分组计算Value均值,重命名为Mean idx_mean = df.groupby('Idx')['Value'].mean().rename('Mean') # 把均值合并回原表 df = df.merge(idx_mean, on='Idx', how='left')
场景2:需要严格按组内行的实际顺序计算(不依赖Idx列的值)
先给每个组生成内部行号,再按行号计算均值合并:
# 生成组内从0开始的行序号,和你原代码nth(n)的入参逻辑完全一致 df['inner_idx'] = df.groupby('GroupID').cumcount() # 按内部序号计算均值 inner_mean = df.groupby('inner_idx')['Value'].mean().rename('Mean') # 合并回原表,不需要inner_idx可以后续drop掉 df = df.merge(inner_mean, on='inner_idx', how='left').drop(columns='inner_idx')
以上两种方案都避免了循环重复计算groupby,在数据量较大的场景下效率会比原有实现提升数十倍以上。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

