Python 如何在同一列上分组和聚合
我有一个销售数据框Python 如何在同一列上分组和聚合,python,pandas,dataframe,aggregate,pandas-groupby,Python,Pandas,Dataframe,Aggregate,Pandas Groupby,我有一个销售数据框 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
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'})似乎有两个问题:
产品
,而不是产品
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
在索引
product
上使用nunique
进行聚合将返回每组1
,因为product
是索引中的最后一级
使用聚合函数'size'
并将序列重命名为count
,如示例所示。然后reset_index
,或者使用选项将groupby设置为_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
groupby上的
count
将返回唯一行的所有计数,然后选择amount并重命名列将完成此工作
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
您好@jpp,您刚刚运行了代码吗,我运行了同一段代码,我得到了这个错误值error:cannotinsert product,已经存在。您提到的产品错误是一个错误typo@AhamedMoosa,很遗憾,我无法复制您的错误。您可以尝试使用
df.head().to_dict()
的输出编辑您的问题,这样我们就有了一个完整的示例。您好@jpp,感谢您指出,这是我的错误,我想知道它的唯一售出天数。我已经编辑了我的问题,谢谢阿里的帮助。感激