You need to enable JavaScript to run this app. Pandas使用NamedAgg按小时、来源分组实现带条件分状态订单数统计
优惠活动
大模型
产品
解决方案
定价
更多

Pandas使用NamedAgg按小时、来源分组实现带条件分状态订单数统计

需求可行性判定

该需求完全可通过pandas.NamedAgg实现,无需将order_state列纳入分组维度,即可完成跨订单状态的条件统计。

问题根因定位

现有代码的条件计数逻辑存在本质偏差:

lambda x: (x == 'finished').count()

上述代码执行时,x == 'finished'会生成布尔值序列,调用序列的.count()方法仅会统计序列内非空元素的总数量,和布尔值本身的真假无关,因此最终计算结果和直接统计分组内总行数完全一致,直接导致所有统计列都输出全量订单数的异常现象。

修正实现

将原有计数逻辑调整为对布尔序列求和即可:pandas中布尔序列的.sum()方法会自动将True映射为1、False映射为0做累加计算,结果恰好等于序列内符合条件的元素个数。
修正后的完整代码如下:

orders_agg = orders.groupby(
    by=[pandas.Grouper(key='created_at', freq='H'), 'source']
).agg(
    orders_count=pandas.NamedAgg('created_at', 'count'),
    finished_orders_count=pandas.NamedAgg('order_state', lambda x: (x == 'finished').sum()),
    cancelled_orders_count=pandas.NamedAgg('order_state', lambda x: (x == 'offer_cancelled').sum())
).reset_index().rename(columns={'created_at': 'datetime_msk'})

补充说明:上述实现全程未修改分组维度,仅在聚合阶段对order_state列做条件判断,输出结果会按小时时间粒度、source维度拆分,同步展示总订单量、已完成订单量、已取消订单量的统计值,完全匹配预期统计效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 03:06:03