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

基于销量峰值周的Group by分组周距计算及新变量生成需求

解决按ID分组计算峰值周距离的问题

我来帮你搞定这个数据集处理需求,用Python的Pandas库就能完美实现,完全贴合你给出的规则。下面是具体的步骤和代码示例:

需求回顾

  • 按Id字段对数据集分组
  • 每个分组内,找到销量最高的那一周(峰值周)
  • 生成新变量output:峰值周的值为0,其他周的值为该周与峰值周的间隔绝对值(比如峰值周是第3周,第2周就是1,第5周就是2,以此类推)

代码实现

首先我们先构造你提供的样例数据,然后执行分组计算:

import pandas as pd

# 构建样例数据集
sample_data = {
    'Id': ['ppr5007288231'] * 8 + ['ppr5007288232'] * 3,
    'week': [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3],
    'sales': [3750.84, 4562.75, 12649.65, 4926.81, 5226.09, 6672.11, 6833.04, 6759.29, 7021.55, 9031.93, 6240.72]
}
df = pd.DataFrame(sample_data)

# 定义分组处理函数
def compute_peak_distance(group):
    # 找到分组内销量最高的周(若多个周销量相同,取第一个出现的峰值周)
    peak_week = group.loc[group['sales'].idxmax(), 'week']
    # 计算每个周与峰值周的间隔绝对值
    group['output'] = abs(group['week'] - peak_week)
    return group

# 按ID分组应用函数,重置索引
result_df = df.groupby('Id').apply(compute_peak_distance).reset_index(drop=True)

print(result_df)

结果验证

运行代码后得到的result_df和你给出的样例输出完全一致:

Idweeksalesoutput
0ppr500728823113750.842
1ppr500728823124562.751
2ppr5007288231312649.650
3ppr500728823144926.811
4ppr500728823155226.092
5ppr500728823166672.113
6ppr500728823176833.044
7ppr500728823186759.295
8ppr500728823217021.551
9ppr500728823229031.930
10ppr500728823236240.721

扩展说明

如果你的数据集存在多个峰值周(即同一个分组内有多个周的销量同为最大值),当前代码会取第一个出现的峰值周作为基准。如果需要调整逻辑(比如取所有峰值周的平均值作为基准,或者计算每个周到最近峰值周的距离),可以修改compute_peak_distance函数:

# 示例:计算到最近峰值周的距离
def compute_nearest_peak_distance(group):
    # 获取所有峰值周的列表
    peak_weeks = group[group['sales'] == group['sales'].max()]['week'].tolist()
    # 计算每个周到最近峰值周的距离
    group['output'] = group['week'].apply(lambda x: min(abs(x - pw) for pw in peak_weeks))
    return group

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:22:26