2017-09-15 60 views
1

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

的问题是GROUPBY似乎产生了关键的元组,然后由所有在做的每一行不可能迭代的数据行的大规模串

+0

你应该发布你的代码和期望的结果。 –

回答

2

当您在数据框应用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产生类似的索引数据框(见说明文档)或dfGroupby.agg,如果你想产生汇总结果。

你会做这样的事情:

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

你会定义功能:

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

如果您有与实施中的问题,请打开一个新的问题,发表您的数据和你的代码,以及任何相关的错误/回溯。快乐的编码。

+0

但是,如果我应用于该组的功能需要原始数据帧的一列,例如在你的例子中,按ID分解日期,但是如果函数依赖于该组内的天数值作为参数呢? – Tolki

+0

@Tolki我应该如何知道如何在没有看到您的代码或数据的情况下回答您?请用更具体的细节开新的问题。我无法给你提供抽象问题的答案。 –