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

Pandas分组计算日期维度下平均每购物篮收入时出现NaN值的问题排查

问题分析与解决

首先得指出你代码里的核心问题:当计算rev_per_basket时,你用了原始DataFrame test的revenue列(8行数据)去匹配分组后的basket_id.nunique()结果(3行数据)——这两个序列长度完全不匹配,Pandas没法正确对齐数据,自然就生成了NaN值。

正确的逻辑应该是:用每个日期的总营收(已经聚合到temp_test里的结果)除以该日期的唯一购物篮数量,这两个值都是按日期聚合后的结果,长度一致,能直接计算出平均每购物篮收入。

修正后的代码

import pandas as pd

test = pd.DataFrame({'date': ['1/07/2019', '1/08/2019', '1/08/2019','1/07/2019', '1/08/2019', '1/09/2019', '1/07/2019', '1/07/2019'], 'basket_id': ['AB789', 'CD674', 'KL237', 'AB789', 'CD674', 'RS234', 'ST089', 'OP448'], 'product_id': ['1839', '0368', '5360', '2524', '1036', '1184', '9280', '7721'], 'revenue': [400, 500, 350, 200, 100, 450, 50, 150]})

# 按日期聚合,给列起更清晰的名字
temp_test = test.groupby(['date']).agg(
    total_revenue=('revenue', sum),
    unique_basket_count=('basket_id', 'nunique')
).reset_index()

# 用聚合后的总营收除以购物篮数量得到平均值
temp_test['rev_per_basket'] = temp_test['total_revenue'] / temp_test['unique_basket_count']

print(temp_test)

运行结果

date  total_revenue  unique_basket_count  rev_per_basket
0  1/07/2019            800                    3      266.666667
1  1/08/2019            950                    2      475.000000
2  1/09/2019            450                    1      450.000000

(补充下:你提到的理想值226.66应该是笔误,1/07/2019的总营收是400+200+50+150=800,除以3个唯一购物篮,结果是800/3≈266.67)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:57:36