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

如何用Pandas cut()按4条记录分组并计算指定列最大值?

我来帮你排查下问题,并且给出正确的实现方案~

你的代码里有两个关键问题导致结果不符合预期:

  • 分组逻辑错误:你用了range(0, len(dataset), 3),步长设成3但实际要的是每4条一组,步长应该是4;而且pd.cut是基于数值区间的分组方式,对于从0开始的索引,第一个区间(0,4]会漏掉索引0,直接导致分组不完整。
  • 聚合逻辑不符合需求:直接调用groups.max()会对所有列取最大值,但你需要的是仅对指定列计算max,其余列保持原样(要么保留组内原行,要么保留组内某一行的内容)。

方案1:生成每组一行的汇总数据集

如果你的需求是每组输出一行,其余列保留组内第一行的内容,仅目标列显示组内最大值,可以这样写:

import pandas as pd

# 替换成你要计算max的目标列名
target_col = "your_target_column"

# 按每4行分组:索引//4 会把0-3分到组0,4-7分到组1,以此类推
groups = dataset.groupby(dataset.index // 4)

# 自定义聚合规则:非目标列取组内第一行,目标列取max
result = groups.agg(
    {col: "first" for col in dataset.columns if col != target_col}
    | {target_col: "max"}
)

# 可选:重置索引让结果更整洁
result = result.reset_index(drop=True)

# 导出为CSV
result.to_csv("grouped_max_result.csv", index=False)

方案2:给原数据集添加组内max列

如果需要保留所有原始记录,同时新增一列显示当前组的目标列最大值,用transform更方便:

import pandas as pd

target_col = "your_target_column"

# 生成组ID:每4行一组
dataset["group_id"] = dataset.index // 4

# 添加组内max列
dataset[f"{target_col}_group_max"] = dataset.groupby("group_id")[target_col].transform("max")

# 导出为CSV(如果不需要group_id可以去掉)
dataset.to_csv("original_with_group_max.csv", index=False)

补充:原代码出错的细节

你用pd.cut(dataset.index, range(0, len(dataset), 3))时,步长3会生成0,3,6...的区间分割点,而pd.cut默认是左开右闭区间,所以索引0会被单独分到(-inf, 0]组,原本应该在一组的0-3行被拆成了两组,这就导致分组完全错误,max结果自然不对。而用dataset.index // 4是最直接的按连续行号分组的方式,完美匹配你要的0-3、4-7这类分组规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:53:14