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

按ID分组,计算时间序列数据不同时间区间的平均值

按ID分组计算不同时间区间的数值平均值

数据预处理

首先要确保日期列是可比较的datetime类型,避免字符串格式导致的判断错误:

import pandas as pd

# 读取数据集(根据你的实际数据源调整,比如Excel或数据库)
df = pd.read_csv("your_dataset.csv")

# 将日期列转换为datetime格式
df["Date"] = pd.to_datetime(df["Date"])
df["Start_Date"] = pd.to_datetime(df["Start_Date"])
df["End_Date"] = pd.to_datetime(df["End_Date"])

分组计算各区间均值

以下提供两种实用方法,根据你的需求选择:

方法一:自定义分组函数(直接输出汇总结果)

假设每个ID对应的Start_Date和End_Date是唯一的,通过分组后自定义函数计算三个区间的均值:

def compute_interval_means(group):
    # 获取当前分组的起止日期(取第一个值即可,确保每个ID的起止日期一致)
    start_date = group["Start_Date"].iloc[0]
    end_date = group["End_Date"].iloc[0]
    
    # 筛选三个区间的数据并计算均值
    mean_before = group[group["Date"] < start_date]["Value"].mean()
    mean_between = group[(group["Date"] >= start_date) & (group["Date"] <= end_date)]["Value"].mean()
    mean_after = group[group["Date"] > end_date]["Value"].mean()
    
    return pd.Series({
        "ID": group["ID"].iloc[0],
        "mean_before_start": mean_before,
        "mean_between_start_end": mean_between,
        "mean_after_end": mean_after
    })

# 应用函数并生成结果表
result_df = df.groupby("ID").apply(compute_interval_means).reset_index(drop=True)

方法二:标记区间后分组统计(保留原数据标记)

如果需要先给每行数据标记所属区间,再进行均值计算:

# 为每行标记所属时间区间
df["interval_tag"] = df.apply(
    lambda row: "before_start" if row["Date"] < row["Start_Date"]
    else "between_start_end" if (row["Date"] >= row["Start_Date"]) & (row["Date"] <= row["End_Date"])
    else "after_end",
    axis=1
)

# 按ID和区间分组计算均值,转换为宽表格式
result_df = df.groupby(["ID", "interval_tag"])["Value"].mean().unstack()
# 重命名列名更直观
result_df = result_df.rename(
    columns={
        "before_start": "mean_before_start",
        "between_start_end": "mean_between_start_end",
        "after_end": "mean_after_end"
    }
).reset_index()

结果说明

  • mean_before_start:对应ID下,所有早于Start_Date的数值平均值
  • mean_between_start_end:对应ID下,所有处于Start_Date和End_Date之间(包含两端日期)的数值平均值
  • mean_after_end:对应ID下,所有晚于End_Date的数值平均值
  • 若某个区间无数据,结果会显示NaN,可根据业务需求用result_df.fillna(0)或其他方式填充空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:57:13