You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按每N行分组处理DataFrame,使apply一次处理多行生成新聚合表

解决方案

核心思路是先生成每N行相同的分组标识,再通过groupby将整组多行数据传给处理逻辑,实现一次处理多行的需求。

步骤实现

1. 构造测试数据

import pandas as pd
import numpy as np

# 构造15行的测试DataFrame
df = pd.DataFrame({
    'A': np.arange(15),
    'B': np.arange(15)*2
})

2. 生成分组键

按每4行一组生成相同的分组ID,适配所有索引场景:

N = 4  # 每组行数
# 索引为连续整数时可以直接用索引整除N
group_key = df.index // N
# 如果索引不连续/非数字,替换为下面的代码
# group_key = np.arange(len(df)) // N

3. 自定义分组处理函数

groupby后的apply会把整组的多行子DataFrame作为入参传给该函数,你可以在函数内实现任意自定义处理逻辑:

def process_group(group):
    # group 是当前分组的全部行组成的子DataFrame
    return pd.Series({
        'sum(A)': group['A'].sum(),
        'mean(B)': group['B'].mean()
    })

4. 执行分组处理

result = df.groupby(group_key).apply(process_group).reset_index(drop=True)

输出结果示例

以上代码运行后得到的结果如下:

sum(A)mean(B)
63.0
2211.0
3819.0
3926.0

优化提示

如果只是做简单的列聚合,不需要复杂自定义逻辑,直接用agg方法性能更高:

result = df.groupby(group_key).agg(
    sum_A=('A', 'sum'),
    mean_B=('B', 'mean')
).reset_index(drop=True)

内容的提问来源于stack exchange,提问作者27Sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:42:03