Сгруппируйте и посчитайте количество строк на основе недели

У меня есть следующий пример данных:

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

Я хочу разбить его на недели и подсчитать количество случаев на этой неделе. В частности, я считаю начало недели понедельником, а конец недели воскресением.

Например, 9/3/2018 - понедельник (или то, что я считаю началом недели). Так что все, что в этот понедельник и в следующее воскресенье я считаю на 9/3/2018.

Ниже приведен результат, который я ищу:

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

2 ответа

Немного времени 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

Ты можешь использовать 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
Другие вопросы по тегам