这是数据框:
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()
答案 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