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

如何按固定行数对Dataframe进行分组求平均聚合?

按行数对DataFrame重采样并计算平均值的解决方法

问题描述

我有一个DataFrame,希望按照行数进行重采样并计算平均值。例如,每3行进行一次聚合:

A  B  C
0  3  4  5
1  5  1  4
2  4  3  5
3  1  5  5
4  3  4  5
5  5  5  5
6  5  0  2 
7  4  0  2
8  3  2  2

期望得到的结果为:

A    B    C
0  4.0  2.7  4.7
1  3.0  4.7  5.0
2  4.0  0.7  2.0

我尝试了类似mdf.groupby('index1')['attr'].mean()的代码变体,但最终出现了KeyError: 'index1'的错误,请求解决该问题。

解决方法

出现KeyError: 'index1'是因为你的DataFrame中不存在名为index1的列,之前的写法逻辑错误。要实现每N行聚合求平均,可利用DataFrame的索引做整数除法来分组:

import pandas as pd

# 构造示例DataFrame
data = {
    'A': [3,5,4,1,3,5,5,4,3],
    'B': [4,1,3,5,4,5,0,0,2],
    'C': [5,4,5,5,5,5,2,2,2]
}
mdf = pd.DataFrame(data)

# 每3行分组计算平均值,保留1位小数
result = mdf.groupby(mdf.index // 3).mean().round(1)
print(result)

运行代码后输出结果与期望完全一致:

A    B    C
0  4.0  2.7  4.7
1  3.0  4.7  5.0
2  4.0  0.7  2.0

原理说明

  • mdf.index // 3会将索引0-2映射为0,3-5映射为1,6-8映射为2,以此实现每3行一组的分组规则。
  • 直接对整个DataFrame调用groupby后执行mean(),会自动对所有数值列计算平均值,若只需计算特定列,可在groupby后指定列名(如mdf.groupby(mdf.index //3)['A','B'].mean())。

内容的提问来源于stack exchange,提问作者Englishman Bob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:10:21