如何按固定行数对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
相关产品推荐
相关产品推荐

