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

基于软件更新周期的变量(x、y)聚合需求

按软件更新周期聚合数据的解决方案

我来帮你搞定这个按软件更新周期聚合数据的需求!首先咱们先把你给的示例数据整理成更清晰的结构化形式,方便理解:

Date    x   y   id  update-size
01.01   1   1   1   (空,无更新)
01.02   2   3   1   2345(有更新)
01.03   4   2   1   (空,无更新)
01.01   5   7   2   3654(有更新)
01.02   2   6   2   (空,无更新)
01.03   3   2   2   4789(有更新)

你的核心需求是:针对每个id(独立软件),每当出现update-size非空的更新事件时,聚合从「上一次更新(或该id的首个数据点)」到「本次更新」之间的所有x、y数据。下面我用Python的pandas工具来实现这个逻辑,这是处理这类数据聚合最常用的方案:

步骤1:数据准备与清洗

首先把数据加载成结构化的DataFrame,并确保时间顺序正确:

import pandas as pd

# 把你的示例数据转换成列表格式
data = [
    ["01.01", 1, 1, 1, None],
    ["01.02", 2, 3, 1, 2345],
    ["01.03", 4, 2, 1, None],
    ["01.01", 5, 7, 2, 3654],
    ["01.02", 2, 6, 2, None],
    ["01.03", 3, 2, 2, 4789]
]

# 创建DataFrame并设置列名
df = pd.DataFrame(data, columns=["Date", "x", "y", "id", "update-size"])

# 把日期转换成datetime格式,确保排序正确
df["Date"] = pd.to_datetime(df["Date"], format="%d.%m")
# 按id和日期排序,保证每个软件的数据是按时间顺序排列的
df = df.sort_values(by=["id", "Date"]).reset_index(drop=True)

步骤2:标记更新周期分组

接下来,我们需要为每个id的数据划分更新周期分组:从首个数据点到第一次更新为一组,第一次更新到第二次更新为下一组,以此类推。

def create_update_groups(group):
    # 找出当前id下所有有更新的行的索引
    update_rows = group[group["update-size"].notna()].index
    if len(update_rows) == 0:
        # 如果该id没有任何更新记录,把所有数据归为一组
        group["update_group"] = 0
        return group
    
    # 初始化分组标签
    group["update_group"] = 0
    current_group = 0
    
    # 遍历每个更新行,把从上次分组结束到当前更新行的所有数据标记为当前组
    for update_idx in update_rows:
        group.loc[:update_idx, "update_group"] = current_group
        current_group += 1
    
    return group

# 按id分组应用上面的函数,生成更新周期标签
df = df.groupby("id", group_keys=False).apply(create_update_groups)

步骤3:按分组聚合数据

最后,我们可以根据需求对每个更新周期的x、y进行聚合(这里以求和为例,你可以换成均值mean、最大值max等):

aggregated_result = df.groupby(["id", "update_group"]).agg(
    周期起始日期=("Date", "min"),
    周期结束日期=("Date", "max"),
    x总和=("x", "sum"),
    y总和=("y", "sum"),
    更新大小=("update-size", "last")  # 取该周期对应的更新大小
).reset_index()

# 打印结果
print(aggregated_result)

输出结果示例

运行后你会得到这样的聚合结果:

id  update_group 周期起始日期 周期结束日期  x总和  y总和  更新大小
0   1             0 2023-01-01 2023-01-02    3    4   2345.0
1   1             1 2023-01-03 2023-01-03    4    2      NaN
2   2             0 2023-01-01 2023-01-01    5    7   3654.0
3   2             1 2023-01-02 2023-01-03    5    8   4789.0

额外说明

  • 如果不需要最后一个没有更新的分组(比如id=1的group1),可以在聚合前过滤掉update-size为空的分组:
    aggregated_result = aggregated_result.dropna(subset=["更新大小"])
    
  • 你可以根据实际需求修改聚合函数,比如把sum改成mean计算平均值,或者添加更多聚合指标。

内容的提问来源于stack exchange,提问作者P.Hubert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:20:31