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

如何按给定步长计算行区间的平均最大值

按指定步长计算行区间平均最大值实现方案

以下提供两种常用场景的实现逻辑,可根据你的技术栈直接套用:

Python Pandas 实现

适合本地处理结构化表格数据,步长和聚合规则可灵活调整:

import pandas as pd

# 读取数据,可替换为pd.read_csv、pd.read_excel等读表逻辑
df = pd.DataFrame({
    'id': [1,2,3,4,5],
    'eventDate': ['10.10.2021', '10.11.2021', '10.12.2021', '10.13.2021', '10.14.2021'],
    'x': [0.33, 0.34, 0.35, 0.36, 0.37],
    'y': [0.4, 0.5, 0.6, 0.7, 0.8]
})

step = 3  # 自定义步长,可任意修改

# 核心逻辑:按步长对行分组
df['group_tag'] = df.index // step

# 分组聚合:每组取最后一行的id和日期,数值列按需求计算
result = df.groupby('group_tag').agg(
    id = ('id', 'last'),
    eventDate = ('eventDate', 'last'),
    x = ('x', 'mean'),  # 若需计算平均最大值,可替换为自定义聚合函数,比如lambda s: (s.max() + s.mean())/2
    y = ('y', 'mean')
).reset_index(drop=True)

print(result)

运行上述代码输出结果和你给出的示例完全一致。

SQL 实现

适合库内数据直接计算,支持MySQL 8.0+、PostgreSQL、Hive等支持窗口函数的数据库:

SET @step = 3; -- 自定义步长

WITH t1 AS (
    SELECT 
        *,
        FLOOR((ROW_NUMBER() OVER(ORDER BY id) - 1) / @step) AS group_num
    FROM 你的表名
)
SELECT 
    MAX(id) AS id,
    MAX(eventDate) KEEP (DENSE_RANK LAST ORDER BY id) AS eventDate,
    AVG(x) AS x, -- 按需求替换为平均最大值的计算逻辑
    AVG(y) AS y
FROM t1
GROUP BY group_num
ORDER BY id;

补充说明

  • 若行数不是步长的整数倍,最后一组默认取剩余所有行计算,符合常规业务逻辑
  • 数值列的计算规则可灵活调整,分组逻辑不需要改动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:03