遍历分组数据框中的组

时间:2019-06-06 10:24:25

标签: python pandas group-by

我正在尝试遍历以下数据框中的组:

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 个答案:

答案 0 :(得分:2)

将元组解包为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