Python 如何对每组的条目进行计数和求和?

Python 如何对每组的条目进行计数和求和?,python,pandas,Python,Pandas,这是数据帧: GROUP TIME EVAL AAA 20 0 AAA 22 0 AAA 21 1 AAA 20 0 BBB 20 0 我想看看每个分组有多少个条目,以及每个分组中有多少条目的EVAL值等于1。我几乎完成了代码,但不知道如何计算每组的条目。它似乎在搜索一列TOTAL\u CALLS,而我想创建它 final = df.groupby(['GROUP']).agg({'TIME':'mean','EVAL

这是数据帧:

GROUP   TIME  EVAL
AAA     20    0
AAA     22    0
AAA     21    1
AAA     20    0
BBB     20    0
我想看看每个分组有多少个条目,以及每个分组中有多少条目的
EVAL
值等于1。我几乎完成了代码,但不知道如何计算每组的条目。它似乎在搜索一列
TOTAL\u CALLS
,而我想创建它

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

您可以使用
lambda
和sum
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
final=df.groupby(['GROUP']).agg({'TIME':['mean','size']),
'EVAL':[lambda x:(x==1.sum(),'sum']})
final=final.rename(列={'':'size\u of_1'})
final.columns=final.columns.map(“”.join)
final=final.reset_index()
打印(最终版)
组评估大小1评估大小总和时间平均时间大小
0 AAA 1 20.75 4
1 BBB020.00 1

使用
时间
列本身,我们可以计算每组的记录数和平均时间。这可以通过发送聚合的列表['mean','count']来实现。我们还可以找到各组的
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

在哪里计算每组的行数?我想创建列
TOTAL\u NUM
,因为它不存在。在本列中,我想输入属于特定组的行的总数。例如,
AAA,21,0,4
,其中
4
是此组合出现的次数。因此,在本例中,
TOTAL\u NUM
4
。也许我应该使用
value\u counts()
或类似于
.size()的东西。到\u frame('TOTAL\u NUM')
?谢谢。是的,我需要4列作为输出,但数值是正确的。好的,请检查我的解决方案,如果有什么错误,请告诉我。谢谢。这看起来回答了问题。你能再提供一点书面解释吗?这将有助于提高OP和答案的质量。
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