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

Python中如何遍历pandas DataFrame行按步长偏移分组计算行均值

问题说明

现有包含100个随机数的Pandas DataFrame,需按以下规则分组计算均值:

  • mean0:索引为0、5、10……的行的均值
  • mean1:索引为1、6、11、16……的行的均值
  • mean2:索引为2、7、12……的行的均值
  • mean3:索引为3、8、13……的行的均值
  • mean4:索引为4、9、14……的行的均值

目前已实现mean0的计算,但未找到合适的迭代方式完成其余均值计算,现有实现代码如下:

import numpy as np
import pandas as pd
import csv

data = np.random.randint(1, 100, size=100)
df = pd.DataFrame(data)

print(df)

df.to_csv('example.csv', index=False)

df1 = df[::5]
print("Every 12th row is:\n",df1)

df2 = df1.mean()
print(df2)

注:现有代码中打印的"Every 12th row"属于笔误,实际取的是从索引0开始、步长为5的行。

实现方法

你现有写法里df[::5]是从索引0开始、每间隔5行取数据,只要循环0-4作为切片起始偏移量,就能拿到所有对应分组,不需要复杂逻辑。

方法1:兼容现有写法的循环实现

直接在原有逻辑基础上扩展,循环0到4的偏移值即可:

import numpy as np
import pandas as pd

data = np.random.randint(1, 100, size=100)
df = pd.DataFrame(data, columns=['val'])

mean_res = {}
for offset in range(5):
    # 从offset位置开始,步长为5取对应分组
    group_data = df.iloc[offset::5]
    mean_res[f"mean{offset}"] = group_data['val'].mean()

# 输出所有结果
for name, val in mean_res.items():
    print(f"{name}: {val:.2f}")

方法2:pandas原生分组高效实现

不需要手动写循环,直接用索引模5的结果作为分组键,一次性算出所有分组均值,代码更简洁:

import numpy as np
import pandas as pd

data = np.random.randint(1, 100, size=100)
df = pd.DataFrame(data, columns=['val'])

# 按索引对5取模的结果分组计算均值
mean_series = df.groupby(df.index % 5)['val'].mean()
# 重命名索引为mean0-mean4
mean_series.index = [f"mean{i}" for i in mean_series.index]

print(mean_series)

内容的提问来源于stack exchange,提问作者A. Gehani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:57:25