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

如何按ID和自定义时间区间分组求和,并合并前3组销售额?

解决方案

步骤1:预处理日期并计算相对天数

首先需要把日期列转为标准datetime格式,再按每个ID计算每条记录相对于该ID最早日期的天数差(让最早日期对应第1天)。假设分组后的数据框名为grouped_df,先重置索引方便操作:

import pandas as pd

# 重置索引,将ID和DATE从多级索引转为普通列
df = grouped_df.reset_index()
# 转换日期格式(匹配示例中的dd/mm/yy格式)
df['DATE'] = pd.to_datetime(df['DATE'], format='%d/%m/%y')
# 按ID分组,计算每条数据的相对天数
df['relative_day'] = df.groupby('ID')['DATE'].transform(lambda x: (x - x.min()).dt.days + 1)

步骤2:划分自定义区间并计算各区间销售额

用pd.cut将相对天数映射到指定区间,再按ID和区间分组求和:

# 定义区间边界与对应标签
bins = [0, 4, 10, 18, 28, float('inf')]
labels = ['第1-4天', '第5-10天', '第11-18天', '第19-28天', '28天之后']

# 为每条数据标记所属区间
df['date_interval'] = pd.cut(df['relative_day'], bins=bins, labels=labels, right=False)

# 按ID和区间分组,计算销售额总和(替换"销售额列名"为实际列名)
interval_sales = df.groupby(['ID', 'date_interval'])['销售额列名'].sum().unstack(fill_value=0)

注意:务必将代码中的销售额列名替换为你数据里实际存储销售额的列名称。

步骤3:合并前3个区间的销售额

直接对前3个区间的列求和,可新增合并列或生成仅保留合并后区间的新数据框:

# 新增合并列,保留原区间数据
interval_sales['第1-18天(合并前3区间)'] = interval_sales[['第1-4天', '第5-10天', '第11-18天']].sum(axis=1)

# 若只需保留合并后的区间与剩余两个区间,执行以下代码
merged_sales = interval_sales[['第1-18天(合并前3区间)', '第19-28天', '28天之后']]

最终输出示例

处理后的数据结构大致如下:

ID第1-4天第5-10天第11-18天第19-28天28天之后第1-18天(合并前3区间)
82599513000.011150.06000.00.00.020150.0
1481730810.00.00.00.0150.00.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:55:44