如何对77列1080行的DataFrame按每15行求min、max和mean?
解决方案
刚好你的数据行数1080是15的整数倍(1080 ÷ 15 = 72组),处理起来非常顺畅。用Pandas的groupby结合agg就能轻松实现需求,具体步骤如下:
- 生成分组键:我们可以用numpy生成一个数组,让每15行对应同一个组编号。比如前15行组号为0,接下来15行组号为1,以此类推。
- 分组聚合:用这个分组键对DataFrame分组,然后同时计算每个列的最小值、最大值和均值。
- 优化列名(可选):默认聚合后的列是多层索引,我们可以把它改成更直观的单层列名,方便后续使用。
直接上代码:
import pandas as pd import numpy as np # 生成分组键:每行对应一个组号,每15行一组 group_ids = np.arange(len(df)) // 15 # 分组计算指定统计量 result_df = df.groupby(group_ids).agg(['min', 'max', 'mean']) # 可选:将多层列名转为单层,格式为「原列名_统计量」 result_df.columns = [f"{col}_{stat}" for col, stat in result_df.columns]
代码解释
np.arange(len(df)) // 15:生成从0到1079的数组,每个数除以15取整,这样自动把每15行归为一组。groupby(group_ids).agg(['min', 'max', 'mean']):按组分组后,对每个列一次性计算三个统计量,返回的结果会有多层列索引(第一层是原列名,第二层是统计量)。- 最后一行的列名调整是可选操作,如果你习惯单层列名的话可以执行,这样列名会变成类似
'columnA_min'、'columnA_max'的形式,更清晰。
执行完后,result_df就是你要的新DataFrame:它会有72行(对应72个分组),77×3=231列(每个原列对应三个统计量列)。
如果你的数据行数不是15的整数倍,这个方法依然有效——最后一组会包含剩下的不足15行的数据,统计量计算逻辑不受影响。
内容的提问来源于stack exchange,提问作者Iwn Aggelidou
相关产品推荐
相关产品推荐

