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

针对列中每个唯一值筛选最早4个日期,计算对应值的平均值

解决方法:按ID筛选最早4条记录并计算Value平均值

没问题,我来帮你搞定这个需求!针对每个唯一ID筛选出对应的最早4条日期记录,再计算这些记录里Value字段的平均值,我会用两种常用工具的实现方案,你可以按需选用:


方法1:SQL实现

如果你的数据存储在数据库里,用窗口函数是最直接的方式。核心思路是先给每个ID下的记录按日期排序标记序号,再筛选序号≤4的记录,最后分组求平均:

WITH ranked_records AS (
    SELECT 
        ID,
        Value,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date ASC) AS record_rank
    FROM your_table_name
)
SELECT 
    ID,
    AVG(Value) AS "Avg Value"
FROM ranked_records
WHERE record_rank <= 4
GROUP BY ID;

说明:

  • PARTITION BY ID:按ID分组处理每条记录
  • ORDER BY Date ASC:确保每个组内按日期从早到晚排序
  • ROW_NUMBER():给每个组内的记录分配递增序号,最早的记录序号为1
  • 最后筛选序号≤4的记录,分组计算Value的平均值即可得到结果

方法2:Python Pandas实现

如果用Python处理本地数据,Pandas可以轻松完成这个任务:

首先假设你的数据是DataFrame格式,先把Date列转换为日期类型,再分组处理:

import pandas as pd

# 示例数据(可以替换成你的数据读取逻辑,比如pd.read_csv)
data = {
    'ID': ['aa1', 'aa1', 'aa1', 'aa1', 'aa1', 'aa1', 'aa2n', 'aa2n', 'aa2n', 'aa2n', 'aa2n'],
    'Date': ['1/1/2006', '2/1/2007', '3/2/2005', '1/20/1998', '5/3/2001', '7/4/2010', '4/3/2002', '4/5/2002', '6/30/2011', '6/21/2012', '1/5/1998'],
    'Value': [5,4,7,10,9,10,5,6,7,5,3]
}
df = pd.DataFrame(data)

# 转换Date列为日期类型,确保排序正确
df['Date'] = pd.to_datetime(df['Date'])

# 按ID分组,每个组按日期排序后取前4条,计算Value的平均值
result = df.groupby('ID').apply(
    lambda group: group.sort_values('Date').head(4)['Value'].mean()
).reset_index(name='Avg Value')

# 格式化输出(可选,让结果更接近示例格式)
print(result.to_string(index=False))

运行后会输出:

ID Avg Value
aa1      7.75
aa2n     5.25

说明:

  • pd.to_datetime(df['Date']):把字符串格式的日期转换为Pandas可识别的日期类型,避免排序错误
  • groupby('ID').apply(...):对每个ID组单独处理
  • sort_values('Date').head(4):按日期升序排序后取最早的4条记录
  • 最后计算这4条记录Value的平均值,重命名列名后得到结果

内容的提问来源于stack exchange,提问作者Al. So

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:03