如何在同一列上分组和聚合

2024-05-05 22:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个销售数据框

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

我想按产品、公司和商店获得每个产品分组的销售订单的唯一计数

^{pr2}$

我试过了

df.groupby(['Store','Company','Product'],as_index='False').agg({'product':'nunique'})

但python抛出了一个值错误,显然我不能使用同一列进行分组和聚合。在

我会很感激你帮我实现目标的

编辑:

我很感激你给我的回答,但这是我的错。实际上,我想找出这些产品销售的唯一天数。在

所以解决办法是,数据框groupby(['Store','Company','Product'],as_index='False').agg({'Date':'nunique'})


Tags: 数据storedateindex产品asproductcompany
3条回答

在索引product上使用nunique聚合将为每个组返回1,因为{}是索引中的最后一级。在

使用聚合函数'size',并将序列重命名为count,如您的示例所示。然后是reset_index,或者使用选项as_index=False选择groupby。在

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

似乎有两个问题:

  1. 您的系列名是product,而不是Product。在
  2. 要获得项目数的计数,可以使用lennunique给出唯一值的数目。在

下面是一个演示:

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

相关问题 更多 >