我有一个销售数据框
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 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'})
但是python会给我一个值错误,显然我不能使用相同的列来进行分组和汇总。
我将非常感谢您帮助我实现目标
编辑:
我感谢你帮助我的所有答案,但这是我的坏事。实际上我想找到这些产品销售的唯一天数。
所以解决方法是,df.groupby(['Store','Company','Product'],as_index ='False')。agg({'Date':'nunique'})
答案 0 :(得分:1)
似乎有两个问题:
product
,而不是Product
。len
。 nunique
给出了唯一值的数量。这是一个演示:
res = df.groupby(['Store','Company','product'],as_index='False').agg({'product': len})
print(res)
product
Store Company product
A comapny_z A003 5
company_x A001 5
company_y A002 5
B comapny_x A001 5
company_y A002 5
company_z A003 5
答案 1 :(得分:1)
在索引nunique
上使用product
进行聚合会为每个组返回1
,因为product
是索引中的最后一个级别。
使用聚合函数'size'
并将系列重命名为count
,如示例所示。然后reset_index
或者使用选项as_index=False
分组。
df.groupby(['Store', 'Company', 'product']).agg('size').rename('count').reset_index()
Store Company product count
0 A comapny_z A003 5
1 A company_x A001 5
2 A company_y A002 5
3 B comapny_x A001 5
4 B company_y A002 5
5 B company_z A003 5
答案 2 :(得分:0)
count
将返回唯一行的所有计数,然后选择金额并重命名该列将完成工作。
data.groupby(['Store','Company','product'],as_index='False').count()['Amount'].rename('count').reset_index()
Store Company product count
0 A comapny_z A003 5
1 A company_x A001 5
2 A company_y A002 5
3 B comapny_x A001 5
4 B company_y A002 5
5 B company_z A003 5