Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在同一列上分组和聚合_Python_Pandas_Dataframe_Aggregate_Pandas Groupby - Fatal编程技术网

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,感谢您指出,这是我的错误,我想知道它的唯一售出天数。我已经编辑了我的问题,谢谢阿里的帮助。感激