代码之家  ›  专栏  ›  技术社区  ›  Wajih

按项目分组,每小时计算熊猫的项目数

  •  1
  • Wajih  · 技术社区  · 7 年前

    index                                Item
    
    2016-10-30 09:58:11                 Bread
    2016-10-30 10:05:34          Scandinavian
    2016-10-30 10:05:34          Scandinavian
    2016-10-30 10:07:57         Hot chocolate
    2016-10-30 10:07:57                   Jam
    2016-10-30 10:07:57               Cookies
    2016-10-30 10:19:12                Pastry
    2016-10-30 10:19:12                Coffee
    2016-10-30 10:19:12                   Tea
    2016-10-30 10:20:51                Pastry
    2016-10-30 10:20:51                 Bread
    2016-10-30 10:21:59                 Bread
    2016-10-30 10:21:59                Muffin
    

    作为熊猫的新手,我对如何按数据帧分组有点迷茫。我需要两样东西:1)每小时的物品计数,就像每小时“面包”的总计数一样

    类似于下面的内容

    index           item          count
    
     2016-10-30 09:00:00   Bread   3
     2016-10-30 10:00:00  Coffee  10
     2016-10-30 11:00:00   Toast   1
    

    然后计算24小时内的项目总数

    index          item  count
    
     2016-10-30    Bread  13
     2016-10-30   Coffee  1200
     2016-10-30    Toast  19
    

    可能是两个独立的操作?

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    得到 DatetimeIndex.floor 并按 GroupBy.size

    print (type(df))
    <class 'pandas.core.frame.DataFrame'>
    
    dates = df.rename_axis('Dates').index.floor('H')
    df1 = df.groupby([dates,'Item']).size().reset_index(name='count')
    print (df1)
                    Dates           Item  count
    0 2016-10-30 09:00:00          Bread      1
    1 2016-10-30 10:00:00          Bread      2
    2 2016-10-30 10:00:00         Coffee      1
    3 2016-10-30 10:00:00        Cookies      1
    4 2016-10-30 10:00:00  Hot chocolate      1
    5 2016-10-30 10:00:00            Jam      1
    6 2016-10-30 10:00:00         Muffin      1
    7 2016-10-30 10:00:00         Pastry      2
    8 2016-10-30 10:00:00   Scandinavian      2
    9 2016-10-30 10:00:00            Tea      1
    

    dates = df.rename_axis('Dates').index.floor('24H')
    df2 = df.groupby([dates,'Item']).size().reset_index(name='count')
    print (df2)
           Dates           Item  count
    0 2016-10-30          Bread      3
    1 2016-10-30         Coffee      1
    2 2016-10-30        Cookies      1
    3 2016-10-30  Hot chocolate      1
    4 2016-10-30            Jam      1
    5 2016-10-30         Muffin      1
    6 2016-10-30         Pastry      2
    7 2016-10-30   Scandinavian      2
    8 2016-10-30            Tea      1
    

    如果 Series

    print (type(s))
    <class 'pandas.core.series.Series'>
    
    dates = s.rename_axis('Dates').index.floor('24H')
    df2 = s.groupby([dates,s]).size().reset_index(name='count')