【问题标题】:Using Pandas Data Frame how to apply count to multi level grouped columns?使用 Pandas Data Frame 如何将计数应用于多级分组列?
【发布时间】:2018-01-07 03:01:52
【问题描述】:

我有一个包含多列的数据框,我想在分组后使用计数,以便将其应用于 2 列或更多列的组合。例如,假设我有两列:

user_id  product_name
1        Apple
1        Banana
1        Apple
2        Carrot
2        Tomato
2        Carrot
2        Tomato 
3        Milk
3        Cucumber

...

我想要实现的是这样的:

user_id  product_name Product_Count_per_User
1        Apple        1 
1        Banana       2
2        Carrot       2
2        Tomato       2
3        Milk         1
3        Cucumber     1

我无法得到它。我试过这个:

dcf6 = df3.groupby(['user_id','product_name'])['user_id', 'product_name'].count()

但它似乎没有得到我想要的,它显示的是 4 列而不是 3 列。如何处理它?谢谢。

【问题讨论】:

    标签: python pandas count multi-level pandas-groupby


    【解决方案1】:

    你同时计算两列,你可以用groupby.size

    (df.groupby(['user_id', 'Product_Name']).size()
       .rename('Product_Count_per_User').reset_index())
    

    或者只计算一列:

    df.groupby(['user_id','Product_Name'])['user_id'].size()
    

    【讨论】:

    • 嗯,count 用于非 NaN 计数,所以这里最好是 size。
    • @jezrael 当然。但是groupby 默认情况下会丢弃nan 值,所以我想现在在这种情况下并不重要,因为他无论如何都在计算组变量。但我同意size 是一个更好的选择。
    【解决方案2】:

    使用GroupBy.size:

    dcf6 = df3.groupby(['user_id','Product_Name']).size()
              .reset_index(name='Product_Count_per_User')
    print (dcf6)
       user_id Product_Name  Product_Count_per_User
    0        1        Apple                       2
    1        1       Banana                       1
    2        2       Carrot                       2
    3        2       Tomato                       2
    4        3     Cucumber                       1
    5        3         Milk                       1
    

    What is the difference between size and count in pandas?

    【讨论】:

      【解决方案3】:

      根据您自己的代码,只需执行此操作。

      df.groupby(['user_id','product_name'])['user_id'].
                agg({'Product_Count_per_User':'count'}).reset_index(level=1)
      
              product_name  Product_Count_per_User
      user_id                      
      1              Apple        2
      1             Banana        1
      2             Carrot        2
      2             Tomato        2
      3           Cucumber        1
      3               Milk        1
      

      【讨论】:

        猜你喜欢
        • 2019-06-04
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 2015-05-01
        • 2018-02-25
        相关资源
        最近更新 更多