使用Python对DataFrame按固定行数分箱求各列平均值的实现问题
Python实现DataFrame每5行分箱计算列均值
你可以直接用pandas完成需求,完整实现代码如下:
import pandas as pd # 1. 读取数据(如果是本地csv直接用pd.read_csv("你的文件路径")即可) # 以下是示例数据构造,你可以替换成自己的数据读取逻辑 data = [ [1, 3, 5, 6], [2, 4, 36, 65], [3, 56, 98, 62], [4, 89, 52, 35], [5, 32, 74, 30], [6, 55, 22, 35], [7, 68, 23, 31], [8, 97, 65, 15], [9, 2, 68, 1], [10, 13, 54, 300] ] df = pd.DataFrame(data, columns=["Unnamed: 0", "C00_zscore", "C01_zscore", "C02_zscore"]) # 2. 清理全空行(适配示例里末尾的空行场景) df = df.dropna(how='all').reset_index(drop=True) # 3. 生成分箱标签,每5行一组 df['bin'] = (df.index // 5) + 1 # 4. 分组求均值,并重命名列 result = df.groupby('bin')[['C00_zscore', 'C01_zscore', 'C02_zscore']].mean()\ .rename(columns=lambda x: x.replace('_zscore', '_binned'))\ .reset_index() # 输出结果 print(result)
运行后输出的结果和预期完全一致:
bin C00_binned C01_binned C02_binned 0 1 36.8 53.0 39.6 1 2 47.0 46.4 76.4
核心逻辑说明
- 用索引的整数除法
//5生成组号:索引默认从0开始时,0-4行计算结果为0,加1后对应第1组,5-9行计算结果为1,加1后对应第2组,刚好匹配每5行分一组的规则 - 分组后直接对需要计算的数值列调用
mean()方法求均值,再替换列名后缀即可
内容的提问来源于stack exchange,提问作者sibillaromana
相关产品推荐
相关产品推荐

