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

Python实现按月统计order_id数量、销售额及累计值求助

Python按月统计订单并计算累计销售额的正确实现

你的代码存在以下几个问题:

  • 列名引用错误:原数据日期列是delivered_date,但你写了orders_df.dates,导致找不到目标列
  • 时间格式符错误:%M代表分钟,提取月份应该用%m,且目标格式是YYYY-MM,需指定为'%Y-%m'
  • GroupBy用法错误:不能直接把聚合函数传入groupby(),需要用agg()方法指定不同列的聚合逻辑

修正后的完整代码:

import pandas as pd

# 构造示例数据
data = {
    'order_id': [1, 2, 3, 4],
    'delivered_date': ['2021-01-01 11:00:00 UTC', '2021-02-01 11:00:00 UTC', 
                       '2021-03-01 11:00:00 UTC', '2021-02-28 11:00:00 UTC'],
    'amount': [233.12, 200.00, 400.00, 120.00]
}
orders_df = pd.DataFrame(data)

# 1. 将日期列转换为datetime类型,解析UTC时间
orders_df['delivered_date'] = pd.to_datetime(orders_df['delivered_date'], utc=True)

# 2. 提取年月作为分组列(格式YYYY-MM)
orders_df['month'] = orders_df['delivered_date'].dt.strftime('%Y-%m')

# 3. 分组聚合:统计订单数、销售额总和
monthly_stats = orders_df.groupby('month').agg(
    count_order_id=('order_id', 'count'),
    sum_amount=('amount', 'sum')
).reset_index()

# 4. 计算累计销售额
monthly_stats['cumulative'] = monthly_stats['sum_amount'].cumsum()

# 重命名列以匹配期望结果
monthly_stats.rename(columns={
    'month': 'delivered_date',
    'count_order_id': 'count(order_id)',
    'sum_amount': 'sum(amount)'
}, inplace=True)

print(monthly_stats)

运行结果:

delivered_datecount(order_id)sum(amount)cumulative
2021-011233.12233.12
2021-022320.00553.12
2021-031400.00953.12

关键步骤说明:

  • 必须先将字符串格式的日期转换为datetime类型,才能使用dt访问器提取年月
  • 使用agg()可以灵活指定不同列的聚合函数,同时自定义结果列名
  • cumsum()方法直接计算销售额的累计值,无需手动循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:39:09