【问题标题】:count instances per day pandas dataframe每天计算实例熊猫数据框
【发布时间】:2018-08-14 02:34:42
【问题描述】:

我有一个数据框

df = pd.DataFrame(data=[[1,0],[1,0],[2,0],[2,1]],columns=['day','class'])

而且我想每天统计 1 类的实例。我就是这样用groupby的,

df.groupby(['class','day'])['class'].count()

Out[51]: 
day  class
1    0        2
2    0        1
     1        1
Name: class, dtype: int64

但我也希望在第 1 天第 1 课中没有实例:

Out[51]: 
day  class
1    0        2
     1        0
2    0        1
     1        1
Name: class, dtype: int64

【问题讨论】:

标签: python pandas dataframe group-by


【解决方案1】:

用参数fill_value=0和stack添加unstack:

df = df.groupby(['day','class'])['class'].count().unstack(fill_value=0).stack()
print (df)
day  class
1    0        2
     1        0
2    0        1
     1        1
dtype: int64

【讨论】:

    【解决方案2】:

    使用 pivot_table,即使不如 jezrael 的解决方案优雅:

    df['class1'] = df['class']
    df = df.pivot_table(index='class', columns='day', values='class1',
                     fill_value=0, aggfunc='count').unstack()
    

    输出:

    day  class
    1    0        2
         1        0
    2    0        1
         1        1
    

    【讨论】:

      【解决方案3】:

      这是一种方法。类别确保当您执行groupby 操作时,每个组合都得到维护。

      这是一个更面向数据而不是面向操作的解决方案。

      df = pd.DataFrame(data=[[1,0], [1,0], [2,0], [2,1]],
                        columns=['day', 'class'],
                        dtype='category')
      
      df['count'] = 1
      res = df.groupby(['class', 'day'], as_index=False)['count'].sum()
      res['count'] = res['count'].fillna(0)
      
      #   class day  count
      # 0     0   1    2.0
      # 1     0   2    1.0
      # 2     1   1    0.0
      # 3     1   2    1.0
      

      【讨论】:

        猜你喜欢
        • 2019-05-13
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        • 2021-07-22
        • 2017-04-11
        相关资源
        最近更新 更多