如何基于DataFrame日期字段按财政年度汇总计算销售总额
解决方案
你可以直接使用pandas的日期处理和分组聚合功能实现需求,以下是完整可运行的代码:
第一步:修正示例代码错误并构造测试数据
你给出的示例代码存在变量名不统一的问题,已调整:
import pandas as pd # 构造测试数据 Customer_ID = [1,2,3,4,5,6,7] Sales_Info = [11,22,33,44,55,66,77] begin_date = '2019-10-16' # 修正变量名:将原代码里的units替换为实际定义的Sales_Info df = pd.DataFrame({'Customer_ID':Customer_ID, 'Sales_Info':Sales_Info, 'Purchase_Date':pd.date_range(begin_date, periods=len(Sales_Info))})
第二步:按财政年度汇总销售额
这里分两种常用场景,你可以根据自身的财政年度规则选择:
场景1:财政年度与自然年一致(每年1月1日-12月31日)
直接提取日期的年份分组即可:
# 提取自然年作为财政年度 df['fiscal_year'] = df['Purchase_Date'].dt.year # 按财政年度分组对销售额求和 result = df.groupby('fiscal_year', as_index=False)['Sales_Info'].sum() print(result)
对应输出结果:
fiscal_year Sales_Info 0 2019 308
场景2:自定义财政年度起始月份(比如每年4月1日到下一年3月31日为一个财政年度)
仅需要调整财政年度的计算逻辑即可,下面以4月为起始月举例,你可以修改start_month参数适配自己的规则:
start_month = 4 # 财政年度起始月份,可根据实际需求修改 # 计算财政年度:如果日期的月份大于等于起始月,财政年度为当前年,否则为前一年 df['fiscal_year'] = df['Purchase_Date'].apply(lambda x: x.year if x.month >= start_month else x.year -1) # 按财政年度分组对销售额求和 result = df.groupby('fiscal_year', as_index=False)['Sales_Info'].sum() print(result)
性能说明
以上方法使用pandas原生向量化操作,就算你的数据集有百万行级别也能快速处理,不会存在性能问题。
内容的提问来源于stack exchange,提问作者Learnasyougo
相关产品推荐
相关产品推荐

