группа панд по неделям - PullRequest
       21

группа панд по неделям

0 голосов
/ 02 ноября 2018

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

       date                 user  answer  
0      2018-08-19 19:08:19  pga   yes   
1      2018-08-19 19:09:27  pga   no   
2      2018-08-19 19:10:45  lry   no   
3      2018-09-07 19:12:31  lry   yes
4      2018-09-19 19:13:07  pga   yes   
5      2018-10-22 19:13:20  lry   no

Я использую следующий код для группировки по неделям:

test.groupby(pd.Grouper(freq='W'))

Я получаю сообщение об ошибке, что Grouper действителен только с DatetimeIndex , однако я не знаю, как его структурировать для группировки по неделям.

1 Ответ

0 голосов
/ 02 ноября 2018

Возможно, у вас есть date столбец в виде строки.

Чтобы использовать его в Grouper с частотой, начните с преобразования этого столбца в DateTime:

df['date'] = pd.to_datetime(df['date'])

Тогда, поскольку date столбец является «обычным» столбцом данных (не индексом), используйте параметр key='date' и частоту.

Подводя итог, ниже приведен рабочий пример:

import pandas as pd

d = [['2018-08-19 19:08:19', 'pga', 'yes'],
     ['2018-08-19 19:09:27', 'pga', 'no'],
     ['2018-08-19 19:10:45', 'lry', 'no'],
     ['2018-09-07 19:12:31', 'lry', 'yes'],
     ['2018-09-19 19:13:07', 'pga', 'yes'],
     ['2018-10-22 19:13:20', 'lry', 'no']]
df = pd.DataFrame(data=d, columns=['date', 'user', 'answer'])
df['date'] = pd.to_datetime(df['date'])
gr = df.groupby(pd.Grouper(key='date',freq='W'))
for name, group in gr:
    print(' ', name)
    if len(group) > 0:
        print(group)

Обратите внимание, что ключ группы (name) - это дата окончания недели, поэтому даты членов группы на раньше или равны дате, напечатанной выше.

Вы можете изменить его, передав label='left' параметр в Grouper.

...