Pandas分组聚合问题:按多列分组统计销售天数的正确方法
销售数据分组统计问题及解决方案
首先,我们有如下的销售DataFrame数据:
Date Store Company product Amount 1-1-18 A company_x A001 10 1-1-18 A company_y A002 20 1-1-18 A comapny_z A003 30 1-1-18 B comapny_x A001 40 1-1-18 B company_y A002 50 1-1-18 B company_z A003 60 2-1-18 A company_x A001 10 2-1-18 A company_y A002 20 2-1-18 A comapny_z A003 30 2-1-18 B comapny_x A001 40 2-1-18 B company_y A002 50 2-1-18 B company_z A003 60 2-1-18 A company_x A001 10 2-1-18 A company_y A002 20 2-1-18 A comapny_z A003 30 2-1-18 B comapny_x A001 40 2-1-18 B company_y A002 50 2-1-18 B company_z A003 60 2-1-18 A company_x A001 10 2-1-18 A company_y A002 20 2-1-18 A comapny_z A003 30 2-1-18 B comapny_x A001 40 2-1-18 B company_y A002 50 2-1-18 B company_z A003 60 3-1-18 A company_x A001 10 3-1-18 A company_y A002 20 3-1-18 A comapny_z A003 30 3-1-18 B comapny_x A001 40 3-1-18 B company_y A002 50 3-1-18 B company_z A003 60
最初的需求与尝试
最初想要按Store、Company、Product分组,统计每个产品的销售订单唯一数量,期望得到的结果如下:
Store Company product Count A Company_x A001 5 B Company_y A002 5 C Company_z A003 5
尝试执行了以下代码:
df.groupby(['Store','Company','Product'],as_index='False').agg({'product':'nunique'})
但运行时抛出了值错误,核心问题有两个:
as_index参数错误:这里传了字符串'False',但该参数需要的是布尔值False,非空字符串会被Python视为True,导致分组索引被保留,不符合预期输出结构。- 聚合列选择错误:已经按
Product分组,每个分组内的product值都是唯一的,用'nunique'聚合得到的结果只会是1,完全不符合需求,甚至触发逻辑错误。
修正需求后的正确解决方案
后来修正需求为统计各产品的销售天数,最终找到正确的代码:
df.groupby(['Store','Company','Product'], as_index=False).agg({'Date':'nunique'})
这段代码的逻辑很清晰:
- 按
Store、Company、Product分组,确保每个组对应特定门店、公司的特定产品 - 对分组后的
Date列使用nunique聚合,统计该产品有多少天产生了销售 as_index=False保证结果不会将分组列设为索引,输出结构更贴近需求格式
内容的提问来源于stack exchange,提问作者Ahamed Moosa
相关产品推荐
相关产品推荐

