【问题标题】:Count number of weeks using pandas groupby使用 pandas groupby 计算周数
【发布时间】:2019-04-02 11:51:12
【问题描述】:

我有以下示例数据框:

Date                count_row   Work_Type
2018-07-31 00:00:00 1           logpage
2018-08-01 00:00:00 1           logpage
2018-08-01 00:00:00 1           logpage
2018-08-01 00:00:00 1           logpage
2018-08-01 00:00:00 1           logpage
2018-09-02 00:00:00 1           logpage
2018-09-02 00:00:00 1           logpage
2018-09-03 00:00:00 1           logpage
2018-09-04 00:00:00 1           logpage
2018-09-04 00:00:00 1           logpage
2018-09-06 00:00:00 1           logpage
2018-09-07 00:00:00 1           logpage
2018-09-08 00:00:00 1           logpage

我想将其分解为几周并计算该周出现的次数。具体来说,我认为一周的开始是星期一,一周的结束是星期日。

例如,2018 年 9 月 3 日是星期一(或者我认为是一周的开始)。所以从那个星期一到下个星期天的任何事情我都算作 2018 年 9 月 3 日。

下面是我正在寻找的数据框结果:

Beginning of Week Date (Mon)    count
7/30/2018                       5
8/27/2018                       2
9/3/2018                        6

我尝试了以下代码:

df.set_index('Date', inplace=True)
df.sort_index(inplace=True)

def take_first(array_like):
    return array_like[0]

output = df.resample('W',                  
                    how={'Date': take_first, 
                         'count_row': 'sum'}, 
                    loffset=pd.offsets.timedelta(days=-6))

这是我得到的错误:

IndexError: index out of bounds

【问题讨论】:

    标签: python pandas datetime count


    【解决方案1】:

    一点 timedeltarithmetic + value_counts 应该可以解决这个问题:

    1. 查找从一周开始的天数的日期偏移量
    2. 减去增量得到一周的开始时间
    3. 计算这些值。

    (df['Date'].sub(pd.to_timedelta(df['Date'].dt.dayofweek, unit='D'))
        .value_counts(sort=False))
    
    2018-07-30    5
    2018-08-27    2
    2018-09-03    6
    Name: Date, dtype: int64
    

    【讨论】:

      【解决方案2】:

      你可以使用resample:

      df.resample('W-Mon', on='Date', label='left', closed='left').sum().query('count_row > 0') 
      

      输出:

                  count_row
      Date                 
      2018-07-30          5
      2018-08-27          2
      2018-09-03          6
      

      【讨论】:

        猜你喜欢
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 2017-05-15
        • 1970-01-01
        相关资源
        最近更新 更多