计算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
相关产品推荐
相关产品推荐

