如何通过循环优化按月份统计支出的Pandas代码效率?
优化Pandas按月份统计支出总额的高效实现
你的现有代码通过逐个筛选月份计算总额,虽能运行,但存在重复遍历数据、代码冗余的问题,数据量较大时效率会明显下降。以下是更高效的实现方案:
核心优化思路
利用Pandas的时间序列分组功能,一次性完成所有月份的统计,避免重复操作。
步骤1:确保日期列是datetime类型
如果你的date列还不是datetime格式,先做转换:
import pandas as pd # 转换日期列格式 df['date'] = pd.to_datetime(df['date'])
步骤2:按月份分组计算总额
直接通过groupby结合时间周期提取,一次性生成所有月份的统计结果:
# 按「年-月」分组,计算每个月的支出总额 monthly_spend = df.groupby(df['date'].dt.to_period('M'))['amount'].sum().reset_index() # 重命名列名,提升可读性 monthly_spend.columns = ['year_month', 'total_spend']
步骤3:(可选)筛选指定年份的数据
如果只需要统计2022年的支出,可先过滤年份再分组:
# 筛选2022年的交易记录 df_2022 = df[df['date'].dt.year == 2022] # 统计2022年各月支出 monthly_spend_2022 = df_2022.groupby(df_2022['date'].dt.to_period('M'))['amount'].sum().reset_index() monthly_spend_2022.columns = ['year_month', 'total_spend']
方案优势
- 效率更高:仅需遍历DataFrame一次,时间复杂度从原方案的O(n*N)(N为月份数)降至O(n),数据量越大,效率提升越明显
- 代码简洁:无需手动编写每个月份的筛选逻辑,避免重复代码和人为错误
- 扩展性强:新增年份或调整统计周期(如按季度),只需修改分组的时间周期参数即可
内容的提问来源于stack exchange,提问作者Robin Baggott la Velle
相关产品推荐
相关产品推荐

