基于Pandas DataFrame实现累计乘积式销售预测计算求助
嘿,很高兴看到你在学习Pandas!你已经完成了两表合并的关键步骤,接下来用cumprod实现累计乘积计算PROJECTION_SALES其实很简单,我来一步步给你演示:
首先,先确认我们的合并数据(我帮你把示例数据写出来,方便复现):
import pandas as pd # 第一个DataFrame first = pd.DataFrame({ 'CCP_DETAILS_SID': [1, 2, 3], 'BASE_LINE': [1235.89, 369.32, 9863.1] }) # 第二个DataFrame second = pd.DataFrame({ 'CCP_DETAILS_SID': [1,1,1,2,2,2,3,3,3], 'PERIOD_SID': [601,602,603]*3, 'GROWTH': [0.1,0.2,0.3]*3 }) # 执行你已经完成的合并操作 merged_df = pd.merge(first, second, how='inner', on='CCP_DETAILS_SID')
接下来就是核心的计算步骤:我们需要按CCP_DETAILS_SID分组,对每个组里的(1 + GROWTH)计算累计乘积,再乘以该组的BASE_LINE(每个组的BASE_LINE是固定值)。这里用groupby配合transform会非常高效:
# 计算PROJECTION_SALES merged_df['PROJECTION_SALES'] = merged_df.groupby('CCP_DETAILS_SID').transform( lambda group: group['BASE_LINE'].iloc[0] * (1 + group['GROWTH']).cumprod() )
代码解释:
groupby('CCP_DETAILS_SID'):按ID分组,确保每个组内的计算独立进行(1 + group['GROWTH']).cumprod():对每个组的增长系数计算累计乘积,比如第一个组会得到[1.1, 1.1*1.2, 1.1*1.2*1.3]group['BASE_LINE'].iloc[0]:取每个组的基准值(因为每个组的BASE_LINE都一样,取第一个就行),和累计乘积相乘得到最终的预测销售额
如果你的数据里PERIOD_SID可能存在乱序的情况,建议先排序再计算,保证累计乘积的顺序正确:
# 先按ID和周期排序 merged_df = merged_df.sort_values(['CCP_DETAILS_SID', 'PERIOD_SID']).reset_index(drop=True)
最后,提取你需要的列查看结果:
result = merged_df[['CCP_DETAILS_SID', 'PERIOD_SID', 'PROJECTION_SALES']] print(result)
输出结果完全符合你的预期:
CCP_DETAILS_SID PERIOD_SID PROJECTION_SALES 0 1 601 1359.4790 1 1 602 1631.3748 2 1 603 2120.78724 3 2 601 406.2520 4 2 602 487.5024 5 2 603 633.75312 6 3 601 10849.4100 7 3 602 13019.2920 8 3 603 16925.0796
内容的提问来源于stack exchange,提问作者Tharunkumar Reddy
相关产品推荐
相关产品推荐

