【问题标题】:Groupby and how value_counts workGroupby 以及 value_counts 如何工作
【发布时间】:2018-12-23 10:53:02
【问题描述】:

我有一个包含以下数据的数据框

     idpresm  teamid competicion      fecha                          local  \
0    12345  dummy1      ECU D1 2018-07-07               Deportivo Cuenca   
1    12345  dummy1      ECU D1 2018-07-03  Liga Dep. Universitaria Quito   
2    12345  dummy1      ECU D1 2018-06-24           Universidad Catolica   
3    12345  dummy1      ECU D1 2018-06-18              Club Sport Emelec   
4    12345  dummy1      ECU D1 2018-06-12           Universidad Catolica   
5    12345  dummy1      ECU D1 2018-06-05                      Delfin SC   
6    12345  dummy1      ECU D1 2018-05-31       Sociedad Deportiva Aucas   
7    12345  dummy1      ECU D1 2018-05-26           Universidad Catolica   
8    12345  dummy1      ECU D1 2018-05-12           Universidad Catolica   
9    12345  dummy1      ECU D1 2018-05-05                         Macara   
10   12345  dummy1      ECU D1 2018-04-28           Universidad Catolica   
11   12345  dummy1      ECU D1 2018-04-21                 Guayaquil City   
12   12345  dummy1      ECU D1 2018-04-14           Universidad Catolica   
13   12345  dummy1      ECU D1 2018-04-07                 CD El Nacional   
14   12345  dummy1      ECU D1 2018-03-31           Universidad Catolica   
15   12345  dummy1      ECU D1 2018-03-25       Independiente Jose Teran   
16   12345  dummy1      ECU D1 2018-03-20           Universidad Catolica   
17   12345  dummy1      ECU D1 2018-03-10          Tecnico Universitario   
18   12345  dummy1      INT CF 2018-03-09                   Colchagua CD   
19   12345  dummy1      ECU D1 2018-03-04           Universidad Catolica   



      aw   homeha    line  awayha  r1  r3  
0   2.39    0.96       0    0.80   1   1  
1   3.79    0.85     0.5    0.91   2   1  
2   9.32    1.00     1.5    0.84   4   0  
3   5.80    0.99       1    0.85   2   3  
4   2.93    0.85   0/0.5    0.97   1   1  
5   3.86    1.04     0.5    0.80   5   2  
6   2.61    0.85       0    0.99   0   1  
7   3.32    1.04   0/0.5    0.80   1   1  
8   5.56    0.90       1    0.94   2   1  
9   2.82    0.70       0    1.16   1   2  
10  3.60    1.00     0.5    0.84   3   1  
11  2.20    1.04       0    0.80   1   1  
12  4.07    0.99     0.5    0.85   2   0  
13  2.77    0.97   0/0.5    0.85   0   0  
14  3.36    0.80     0.5    1.02   3   1  
15  6.11    0.97     0.5    0.85   2   1  
16  2.03    0.91  0/-0.5    0.85   2   0  
17  2.21    0.70  0/-0.5    1.13   0   2  
18  1.44     NaN     NaN     NaN   0   0  
19  2.76    0.80       0    1.02   1   2  

我所做的是我通过本地列gruopby,然后我打算获得列 r1 的平均值,为此我执行以下操作

homedata.groupby('local')['r1'].agg({'media':np.average,'contador': lambda x: x.value_counts()})

我希望'contador' 中有一列整数。我得到的是这个

                                media      contador
local                                                
CD El Nacional                 0.000000             1
Club Sport Emelec              2.000000             1
Colchagua CD                   0.000000             1
Delfin SC                      5.000000             1
Deportivo Cuenca               1.000000             1
Guayaquil City                 1.000000             1
Independiente Jose Teran       2.000000             1
Liga Dep. Universitaria Quito  2.000000             1
Macara                         1.000000             1
Sociedad Deportiva Aucas       0.000000             1
Tecnico Universitario          0.000000             1
Universidad Catolica           2.111111  [3, 3, 2, 1]

为什么我得到的是列表而不是 9?

【问题讨论】:

    标签: python python-3.x pandas count pandas-groupby


    【解决方案1】:

    您正在寻找'size'。对于常用函数,您应该相信字符串被映射到有效的算法。例如:

    d = {'media': 'mean', 'contador': 'size'}
    res = homedata.groupby('local')['r1'].agg(d)
    

    我希望 'contador' 中有一列整数。

    这不是您应该期望的。首先注意pd.Series.value_counts 返回一个计数对象pd.Series,而不是一个整数。目前还不清楚您期望此方法返回什么整数。

    有些值是整数而有些是列表的原因表明 groupby 正在执行一些转换:它假设如果 value_counts 返回一个长度为 1 的序列,您只对该序列的第一个值感兴趣。

    为了说明,让我们看一个您所看到的最小示例:

    import pandas as pd
    
    df = pd.DataFrame([['A', 1], ['B', 2], ['B', 2], ['C', 4],
                       ['B', 2], ['B', 6]], columns=['Group', 'Value'])
    
    res = df.groupby('Group')['Value'].agg({'counts': lambda x: x.value_counts()})
    
    print(res)
    
           counts
    Group        
    A           1
    B      [3, 1]
    C           1
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2019-01-18
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      相关资源
      最近更新 更多