У меня есть такая таблица:

   user   week  message  col2
   ----  -----  ----     ----
     A     1     Hi       30
     A     1     Hello    30
     A     2     To       30
     A     2     From     40
     B     1     call     30
     B     1     should   20
     B     2     sadas    50

Мне нужно сначала сгруппировать по пользователю, а затем сгруппировать по неделям и обработать некоторые данные.

Пример:

    for user in everyUser:
        for week in everyWeek:
             week_data = list of all messages of the week.

Нужно сделать что-то подобное в Pandas, после загрузки в фрейм данных я сгруппировал данные по пользователям и по неделям, и я не знаю, как получить доступ к данным после группировки.

А также, как мы можем получить доступ к данным пользователя, как только мы сгруппируем их?

Любая помощь высоко ценится!

0
Magic 24 Апр 2017 в 02:40

2 ответа

Лучший ответ

Вы можете использовать шаблон groupby.apply; В общем случае apply принимает функцию и принимает данные из каждой группы сгруппированного фрейма данных в качестве аргумента; В этом случае, если вы просто заботитесь о message, используйте [] для извлечения столбца и примените к сообщению функцию list для каждого пользователя, которая выдаст список сообщений для пользователь на соответствующей неделе:

df.groupby(['user', 'week'])['message'].apply(list)

#user  week
#A     1          [Hi, Hello]
#      2           [To, From]
#B     1       [call, should]
#      2              [sadas]
#Name: message, dtype: object
2
Psidom 23 Апр 2017 в 23:45
#create your group
group = df.groupby(by=['user','week'])

#print all the groups and values
for k,v in group:
    print(k)
    print(v)
#get a group by the group key (user,week)    
group.get_group(('A', 1))   
Out[134]: 
  user  week message  col2
0    A     1      Hi    30
1    A     1   Hello    30
2
Allen 23 Апр 2017 в 23:51