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
相关产品推荐
相关产品推荐

