Перебор групп в фрейме данных - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь перебрать группы в следующем фрейме данных:

gop      Family         date         Amount
A          F1        2019-03-06       0.00      
                     2019-04-04       0.00
                     2019-05-07       0.00
B          F1        2019-03-06      -0.02
                     2019-04-04      -25.02
                     2019-05-07      -7.02
           F2        2019-03-06      -40.68
                     2019-04-04       2.76
                     2019-05-07      3525.57

Я использовал следующий код:

df_grouped = df.sort_values(['date']).groupby(['gop', 'Family', 'date'])
for group in df_grouped:
    #operations on groups

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

Ожидаемые кадры данных:

gop      Family         date         Amount
A          F1        2019-03-06       0.00      
                     2019-04-04       0.00
                     2019-05-07       0.00

###############
gop      Family         date         Amount
B          F1        2019-03-06      -0.02
                     2019-04-04      -25.02
                     2019-05-07      -7.02
##############
gop      Family         date         Amount
B           F2        2019-03-06      -40.68
                     2019-04-04       2.76
                     2019-05-07      3525.57

1 Ответ

2 голосов
/ 06 июня 2019

Распакуйте кортежи для 2 переменных - например, добавьте i для имени группы и group для DataFrame:

print (df.index)
MultiIndex(levels=[['A', 'B'], ['F1', 'F2'], ['2019-03-06', '2019-04-04', '2019-05-07']],
           codes=[[0, 0, 0, 1, 1, 1, 1, 1, 1], 
                  [0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2, 0, 1, 2]],
           names=['gop', 'Family', 'date'])

df_grouped = df.sort_values(['date']).groupby(['gop', 'Family'])
for i, group in df_grouped:
    print (i)
    print (group)
('A', 'F1')
                       Amount
gop Family date              
A   F1     2019-03-06     0.0
           2019-04-04     0.0
           2019-05-07     0.0
('B', 'F1')
                       Amount
gop Family date              
B   F1     2019-03-06   -0.02
           2019-04-04  -25.02
           2019-05-07   -7.02
('B', 'F2')
                        Amount
gop Family date               
B   F2     2019-03-06   -40.68
           2019-04-04     2.76
           2019-05-07  3525.57

Также возможна распаковка снова кортежей, созданных столбцами в groupby:

for (a,b), group in df_grouped:
    print (a)
    print (b)
    print (group)

A
F1
                       Amount
gop Family date              
A   F1     2019-03-06     0.0
           2019-04-04     0.0
           2019-05-07     0.0
B
F1
                       Amount
gop Family date              
B   F1     2019-03-06   -0.02
           2019-04-04  -25.02
           2019-05-07   -7.02
B
F2
                        Amount
gop Family date               
B   F2     2019-03-06   -40.68
           2019-04-04     2.76
           2019-05-07  3525.57
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...