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

如何按客户需求变化频率对产品排序?附Pandas数据集

解决方法

步骤1:数据重塑(宽表转长表)

先把横向的月度需求列转为纵向结构,方便按产品、预测日期、需求月份维度分析变化。假设月度需求列命名类似demand_202401、demand_202402:

import pandas as pd

# 假设原数据集存储在df中
# 筛选所有月度需求列
demand_cols = [col for col in df.columns if 'demand_' in col]

# 转换为长表格式
long_df = df.melt(
    id_vars=['Products', 'customer_demand_date'],
    value_vars=demand_cols,
    var_name='demand_month',
    value_name='demand_quantity'
)
# 提取纯月份数字(比如从'demand_202401'提取202401)
long_df['demand_month'] = long_df['demand_month'].str.extract(r'(\d{6})').astype(int)
# 按产品、需求月份、预测日期排序,保证后续对比逻辑正确
long_df = long_df.sort_values(['Products', 'demand_month', 'customer_demand_date']).reset_index(drop=True)

步骤2:统计产品需求变化频率

对每个产品的每个需求月份,对比相邻两次预测日期的需求数值,统计变化次数与占比:

# 标记同一产品-需求月份组内,相邻预测日期的需求是否变化
long_df['is_changed'] = long_df.groupby(['Products', 'demand_month'])['demand_quantity'].diff().ne(0).astype(int)

# 按产品汇总变化统计指标
change_stats = long_df.groupby('Products').agg(
    total_change_times=('is_changed', 'sum'),
    total_observation_times=('is_changed', 'count')
).reset_index()

# 计算变化占比(排除第一次无对比的观测)
change_stats['change_ratio'] = change_stats['total_change_times'] / (change_stats['total_observation_times'] - 1)
# 处理仅1次预测日期的产品(无对比数据,占比设为0)
change_stats['change_ratio'] = change_stats['change_ratio'].fillna(0)

步骤3:排序并生成排名

按变化占比(相对频率)降序排序,相同占比则按总变化次数排序,添加排名列:

# 排序规则:先看变化占比,再看总变化次数
change_stats = change_stats.sort_values(by=['change_ratio', 'total_change_times'], ascending=False).reset_index(drop=True)
# 添加排名
change_stats['rank'] = change_stats.index + 1

# 输出最终结果(保留核心列)
final_result = change_stats[['rank', 'Products', 'total_change_times', 'total_observation_times', 'change_ratio']]
print(final_result)

关键说明

  • 总变化次数:统计产品所有需求月份中,相邻预测日期需求数值发生变动的总次数。
  • 变化占比:变化次数除以有效对比次数(总观测次数-1),避免不同产品预测次数差异导致的频率偏差,更能体现真实变化频率。
  • 如果月度需求列命名规则不同,只需调整demand_cols的筛选逻辑和demand_month的提取代码即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:40:29