以下是我的数据的最小示例:
我想按
即,生成以下结果:
Id Session Flag toSum
0 1 1 1 2
1 1 2 0 4
2 1 3 0 5
3 1 4 1 6
4 1 5 1 3
5 1 6 0 0
6 1 7 1 1
7 2 1 0 4
8 2 2 1 6
9 2 3 0 2
10 3 1 1 4
11 4 1 1 2
12 4 2 0 1
13 4 3 0 5
14 4 4 1 10
可重现的方法如下:
df = pd.DataFrame({
'Id': [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 4, 4, 4],
'Session':[1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 1, 1, 2, 3, 4],
'Flag': [1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1],
'toSum': [2, 4, 5, 6, 3, 0, 1, 4, 6, 2, 4, 2, 1, 5, 10]
})
我想按
Id
分组,并对Flag
列进行聚合,以计算每个Id的标记百分比,同时对toSum
列进行求和。即,生成以下结果:
Id Flag % toSum
0 1 57.14 21
1 2 33.33 12
2 3 100.0 4
3 4 50.0 18
这个如何实现?
lambda x: f'{x.mean():.2%}'
might be the one-liner solution:df.groupby('Id').agg({'Flag': lambda x: f'{x.mean():.2%}', 'toSum':'sum'})
- ThePyGuyagg
中使用复杂的函数,最好是在解决方案之后添加。 - jezraelagg
中**{}
的巧妙技巧也很不错。 - ChrisOram