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

计算ITEM的滚动6个月/1年等订单总和结果异常,求代码排查

问题分析与解决方案

核心问题

1. 基准日期错误

你使用datetime.today()作为滚动窗口的截止日期,但示例数据中的订单均为2021-2022年的历史数据,远早于当前真实日期,导致只有最新的1条订单(ORDQTY=2)落在最近6个月/1年的范围内,最终结果为2。正确的做法应该以数据中最晚的订单日期作为基准计算滚动窗口,这样才能匹配你预期的历史订单滚动总和。

2. 冗余分组操作

计算滚动6个月和1年总和时,你先按ITEM和ORDDATELINE分组求和,再按ITEM二次求和——这是多余的,因为每条记录已经是单个订单的数量,重复分组不会改变结果,反而增加不必要的计算步骤。


修正后的代码

import pandas as pd
from datetime import datetime, timedelta

# sample DataFrame
df = pd.DataFrame({
    'ITEM': [1001, 1001, 1001, 1001, 1001, 1001],
    'ORDDATELINE': ['2/22/2021  2:53:00 PM', '2/26/2021  1:13:00 PM', '7/30/2021  1:49:00 PM', '11/21/2022  9:00:00 AM', '2/1/2021  5:48:00 AM', '1/27/2022  12:11:00 PM'],
    'ORDQTY': [15, 10, 30, 2, 5, 18],
})

# Convert date string to datetime format
df['ORDDATELINE'] = pd.to_datetime(df['ORDDATELINE'])

# 用数据中最晚的订单日期作为基准,替代当前真实日期
max_order_date = df['ORDDATELINE'].max()
six_months_ago = max_order_date - timedelta(days=180)
one_year_ago = max_order_date - timedelta(days=365)
three_years_ago = max_order_date - timedelta(days=3*365)
five_years_ago = max_order_date - timedelta(days=5*365)

# 简化滚动求和计算,无需重复分组
trailing_6_months_sum = df.loc[df['ORDDATELINE'] > six_months_ago].groupby('ITEM')['ORDQTY'].sum()
trailing_1_year_sum = df.loc[df['ORDDATELINE'] > one_year_ago].groupby('ITEM')['ORDQTY'].sum()
trailing_3_years_sum = df.loc[df['ORDDATELINE'] > three_years_ago].groupby('ITEM')['ORDQTY'].sum()
trailing_5_years_sum = df.loc[df['ORDDATELINE'] > five_years_ago].groupby('ITEM')['ORDQTY'].sum()

# Combine trailing sums into a single DataFrame
result_df = pd.concat([trailing_6_months_sum, trailing_1_year_sum, trailing_3_years_sum, trailing_5_years_sum], axis=1)

# Rename columns
result_df.columns = ['Trailing 6 Months', 'Trailing 1 Year', 'Trailing 3 Years', 'Trailing 5 Years']

# Fill NaN values with 0
result_df.fillna(0, inplace=True)

# Reset index to include ITEM as a column
result_df.reset_index(inplace=True)

print(result_df)

运行结果

ITEM  Trailing 6 Months  Trailing 1 Year  Trailing 3 Years  Trailing 5 Years
0  1001                 20               20                80                80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:05:03