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

如何高效将pandas DataFrame按行数均分分组后绘制平均值堆叠柱状图

你的原代码存在两个问题:一是循环赋值效率低,二是df.iloc[i:i + step]['p'] = i属于链式索引,会触发SettingWithCopyWarning,可能实际无法成功给p列赋值。
下面是两种更高效的实现方式:

方法1:使用pd.qcut等频分箱(最适配需求)

pd.qcut专门用于将数据划分为数量尽可能相等的N个分箱,完全符合你分组行数大致相等的需求,全程向量化操作无循环:

import numpy as np

bin_count = 10
# 生成0到bin_count-1的分组标签,每组行数尽可能相等
df['p'] = pd.qcut(np.arange(len(df)), q=bin_count, labels=False)
# 分组求均值+绘制堆叠柱状图
df.groupby('p').mean().plot.bar(stacked=True)

方法2:使用整数除法生成分组标签(逻辑最贴近原代码)

如果你希望完全对齐原代码的分组逻辑,用numpy向量化的整数除法替代循环即可,一行就能生成分组标签:

import numpy as np
import math

bin_count = 10
step = math.ceil(df.shape[0] / bin_count)
# 向量化生成分组标签,替代原循环
df['p'] = np.arange(df.shape[0]) // step
df.groupby('p').mean().plot.bar(stacked=True)

两种实现都比原循环方案性能高得多,数据量达到万行及以上时优势会非常明显,同时也避免了原代码的链式赋值风险。

内容的提问来源于stack exchange,提问作者v_0ver

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:36:02