pandas.DataFrame.groupby如何实际工作

时间:2016-08-06 21:29:16

标签: python pandas dataframe

我需要将pandas.DataFrame分组为一列,两列和三列,并计算"组"的平均值。

类似的东西:

    col1  col2  col3  col4
0   A     17    R     3
1   B     5     T     7
2   F     25    R     11
3   A     33    R     15
4   B     17    T     19
5   F     25    R     23
6   F     25    E     27

按列分组:col1

这里我希望结果为(col3被删除,因为它不是数字):

                  col2         col4
   col1 = A | 0  (17+33)/2    (3+15)/2
   col1 = B | 1  (5+17)/2     (7+19)/2
   col1 = F | 2  (25+25+25)/2    (11+23)+27/2

按列分组:col1& COL3

                             col2         col4
   col1 = A & col3 = R | 0  (17+33)/2    (3+15)/2
   col1 = B & col3 = T | 1  (5+17)/2     (7+19)/2
   col1 = F & col3 = R | 2  (25+25)/2    (11+23)/2
   col1 = F & col3 = E | 4  25          27

同样的事情,对于3个专栏组。

我找到了pandas.DataFrame.groupby().mean()方法,但我无法弄清楚它是如何工作的。

例如,对于这个简单的数据框:

In [1]: df
Out[2]: 
       v1  v2  v3  v4
    0   0  17   2   3
    1   4   5   6   7
    2   8  25  10  11
    3  12  33  14  15
    4  16  17  18  19
    5  20  25  22  23
    6  24  25  26  27
    7  28  29  30  31
    8  32   5  34  35
    9  36   5  38  39
In [2]: df.groupby(["v2"]).mean()
Out[2]: 
           v1         v3         v4
v2                                 
5   24.000000  26.000000  27.000000
17   8.000000  10.000000  11.000000
25  17.333333  19.333333  20.333333
29  28.000000  30.000000  31.000000
33  12.000000  14.000000  15.000000

## For this first case it's ok...

In [3]: df.groupby(["v2","v3"]).mean()
Out[3]: 
       v1  v4
v2 v3        
5  6    4   7
   34  32  35
   38  36  39
17 2    0   3
   18  16  19
25 10   8  11
   22  20  23
   26  24  27
29 30  28  31
33 14  12  15

groupby函数究竟是如何工作的以及为什么这个结果(out [3])与原始数据帧的长度不同(因为没有公共对(v2,v3))数据帧)???

1 个答案:

答案 0 :(得分:2)

对于前面的前两个示例,以下是您要查找的语法:

hydra = Typhoeus::Hydra.new
10.times.map{ hydra.queue(Typhoeus::Request.new("www.example.com", followlocation: true)) }
hydra.run

这有助于您获得所需的群组吗?