如何统计和总计每个组的条目?

时间:2017-02-15 11:39:35

标签: python pandas

这是数据框:

GROUP   TIME  EVAL
AAA     20    0
AAA     22    0
AAA     21    1
AAA     20    0
BBB     20    0

我想查看每个分组中有多少条目以及每个分组中有多少条目EVAL等于1。我差不多完成了代码,但不知道如何计算每组的条目。它似乎在搜索列TOTAL_CALLS,而我想创建它。

final = df.groupby(['GROUP']).agg({'TIME':'mean','EVAL':'sum','TOTAL_NUM':'count'}).reset_index()

3 个答案:

答案 0 :(得分:1)

您可以使用lambda并加boolean mask

final = df.groupby(['GROUP']).agg({'TIME':['mean', 'size'],
                                  'EVAL': [lambda x: (x == 1).sum(), 'sum']})
final = final.rename(columns={'<lambda>':'size_of_1'})
final.columns = final.columns.map('_'.join)
final = final.reset_index()
print (final)
  GROUP  EVAL_size_of_1  EVAL_sum  TIME_mean  TIME_size
0   AAA               1         1      20.75          4
1   BBB               0         0      20.00          1

答案 1 :(得分:1)

使用Time列本身,我们可以计算每组的记录数和平均时间。这可以通过为聚合发送列表[&#39; mean&#39;,&#39; count&#39;]来实现。我们也可以为每个组找到Eval的总和。

  print(data.groupby(['Group']).agg({'Time':['mean','count'],'Eval' : 'sum'}).reset_index())


  Group Eval   Time      
         sum   mean count
0   AAA    1  20.75     4
1   BBB    0  20.00     1

答案 2 :(得分:1)

df:
    EVAL GROUP  TIME
0  0     AAA   20  
1  0     AAA   22  
2  1     AAA   21  
3  0     AAA   20  
4  0     BBB   20     

# group by 'GROUP'
gb = df.groupby('GROUP')

# aggregate each column by method
final = gb.agg({'GROUP': 'count',
                'EVAL': 'sum',
                'TIME': 'mean'})

# rename columns and reset index
final = final.rename(columns={'GROUP': 'GROUP_TOTAL',
                              'EVAL': 'EVAL_COUNT',
                              'TIME': 'TIME_AVG'}).reset_index()

out:
  GROUP  EVAL_COUNT  TIME_AVG  GROUP_TOTAL
0  AAA   1          20.7500    4          
1  BBB   0          20.0000    1