我有一个dataframe,它最初是由2个dataframe -launches.merge(dropped,on=('id',how='left')
构建的,所以结果我得到
id name colour dropped
1 K pink 1
2 K red 1
3 L blue 1
4 M red NaN
5 K pink 1
6 K pink NaN
where列drop来自带drop的数据框(这是一个标志)结果我想得到这样的数据帧
name colour launches dropped
K pink 3 2
K red 1 1
L blue 1 1
M red 1 0
我试了下面的
df = d.groupby(['name','colour']).count()
您可以使用命名聚合分别执行计数和求和:
(df.groupby(['name', 'colour'])
.agg(launches = ('dropped', 'size'),
dropped = ('dropped', 'sum'))
.reset_index()
)
name colour launches dropped
K pink 3 2.0
red 1 1.0
L blue 1 1.0
M red 1 0.0
另一个选项,感谢@HenryEcker,是使用计数,而不是求和,因为count
忽略空值,并返回整数:
(df.groupby(['name', 'colour'])
.agg(launches=('dropped', 'size'),
dropped=('dropped', 'count'))
.reset_index()
)
Out[135]:
name colour launches dropped
K pink 3 2
red 1 1
L blue 1 1
M red 1 0