首页 > 解决方案 > 如何获得等于字符串值的元素的百分比

问题描述

如何获得按组 ( name)t_results等于 "ok" 的百分比?

    name   t_result
0   aaa    ok   
1   aaa    err_1
2   bbb    err_1
3   bbb    ok
4   aaa    err_2
5   aaa    ok


name, percentage
aaa   0.5
bbb   0.5

标签: pythonpandas

解决方案


您可以使用mean布尔掩码,比较 by Series.eq,转换为0, 1by Series.vieworSeries.astype和聚合 by df['name']as Series

df1 = (df['t_result'].eq('ok')
                     .view('i1') # .astype(int)
                     .groupby(df['name'])
                     .mean()
                     .reset_index(name='percentage'))
print (df1)
  name  percentage
0  aaa         0.5
1  bbb         0.5

具有新列并按列名聚合的解决方案name

df1 = (df.assign(percentage = df['t_result'].eq('ok').view('i1'))
         .groupby('name', as_index=False)
         .mean())

推荐阅读