如何在同一列

时间:2018-05-26 10:59:19

标签: 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_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'})

3 个答案:

答案 0 :(得分:1)

似乎有两个问题:

  1. 您的系列名称为product,而不是Product
  2. 要计算项目数,您可以使用lennunique给出了唯一值的数量。
  3. 这是一个演示:

    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)

groupby上的

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