迭代数据帧中的组

时间:2017-09-15 02:40:33

标签: python pandas dataframe group-by

我遇到的问题是我想对数据帧进行分组,然后使用函数在数据分组后对其进行操作。例如,我想按日期对数据进行分组,然后遍历日期组中的每一行来解析函数?

问题是groupby似乎创建了一个键的元组,然后是一个由数据中的所有行组成的大量字符串,使得每行都不可能迭代

1 个答案:

答案 0 :(得分:3)

在数据框上应用groupby时,如果没有行,则会获得数据帧组。例如,考虑:

df
     ID        Date  Days  Volume/Day
0   111  2016-01-01    20          50
1   111  2016-02-01    25          40
2   111  2016-03-01    31          35
3   111  2016-04-01    30          30
4   111  2016-05-01    31          25
5   111  2016-06-01    30          20
6   111  2016-07-01    31          20
7   111  2016-08-01    31          15
8   111  2016-09-01    29          15
9   111  2016-10-01    31          10
10  111  2016-11-01    29           5
11  111  2016-12-01    27           0
0   112  2016-01-01    31          55
1   112  2016-01-02    26          45
2   112  2016-01-03    31          40
3   112  2016-01-04    30          35
4   112  2016-01-05    31          30
5   112  2016-01-06    30          25
6   112  2016-01-07    31          25
7   112  2016-01-08    31          20
8   112  2016-01-09    30          20
9   112  2016-01-10    31          15
10  112  2016-01-11    29          10
11  112  2016-01-12    31           0


for i, g in df.groupby('ID'):
     print(g, '\n')

     ID        Date  Days  Volume/Day
0   111  2016-01-01    20          50
1   111  2016-02-01    25          40
2   111  2016-03-01    31          35
3   111  2016-04-01    30          30
4   111  2016-05-01    31          25
5   111  2016-06-01    30          20
6   111  2016-07-01    31          20
7   111  2016-08-01    31          15
8   111  2016-09-01    29          15
9   111  2016-10-01    31          10
10  111  2016-11-01    29           5
11  111  2016-12-01    27           0 

     ID        Date  Days  Volume/Day
0   112  2016-01-01    31          55
1   112  2016-01-02    26          45
2   112  2016-01-03    31          40
3   112  2016-01-04    30          35
4   112  2016-01-05    31          30
5   112  2016-01-06    30          25
6   112  2016-01-07    31          25
7   112  2016-01-08    31          20
8   112  2016-01-09    30          20
9   112  2016-01-10    31          15
10  112  2016-01-11    29          10
11  112  2016-01-12    31           0 

对于您的情况,您应该查看dfGroupby.apply,如果您想对您的群组应用某些功能,dfGroupby.transform以生成类似索引的数据框(请参阅文档以获取解释)或{{3} },如果你想产生汇总的结果。

你会做类似的事情:

r = df.groupby('Date').apply(your_function) 

您将功能定义为:

def your_function(df):
    ... # operation on df
    return result

如果您遇到实施问题,请打开一个新问题,发布您的数据和代码,以及任何相关的错误/追溯。快乐的编码。