python - 根据分子中是否包含值和分母中的唯一列值计算按百分比分组
问题描述
我正在尝试计算一个比率或百分比,它采用按列(服务列)分组的出现次数,该列至少具有两个可能值(食品或饮料)之一,然后将其除以唯一列的数量(业务df 中的列)值,但我遇到了麻烦。
原始df:
Rep | Business | Service
Cindy Shakeshake Food
Cindy Shakeshake Outdoor
Kim BurgerKing Beverage
Kim Burgerking Phone
Kim Burgerking Car
Nate Tacohouse Food
Nate Tacohouse Car
Tim Cofeeshop Coffee
Tim Coffeeshop Seating
Cindy Italia Seating
Cindy Italia Coffee
Desired Output:
Rep | %
Cindy .5
Kim 1
Nate 1
Tim 0
其中 % 是 cindy 拥有的至少 1 个食品或饮料行的企业数量除以她 df 中的所有唯一企业。
我正在尝试以下内容:
(df.assign(Service=df.Service.isin(['Food','Beverage']).astype(int))
.groupby('Rep')
.agg({'Business':'nunique','Service':'count'}))
s['Service']/s['Business']
但这并没有给我我正在寻找的东西,因为在这种情况下,服务只为 cindy 提供了 df 中的所有行 4,而 Businees 列并没有给我准确的 # 她在按业务分组的食物或饮料的位置。
感谢您提前寻找和可能的帮助。
解决方案
我你认为你需要聚合sum
计数匹配值:
df1 = (df.assign(Service=df.Service.isin(['Food','Beverage']).astype(int))
.groupby('Rep')
.agg({'Business':'nunique','Service':'sum'}))
print (df1)
Business Service
Rep
Cindy 2 1
Kim 2 1
Nate 1 1
Tim 2 0
s = df1['Service']/df1['Business']
print (s)
Cindy 0.5
Kim 0.5
Nate 1.0
Tim 0.0
dtype: float64
推荐阅读
- c# - 如何将多个页面添加到打印预览
- homebrew - pipenv python升级没有这样的文件
- drupal - 如何配对 DDEV 数据库以从 Drupal 7 迁移到 Drupal 8
- html - 如何隐藏视频控件
- javascript - 单击并返回下一步更改 div 阴影
- java - 如何找到我的数据库 url 以连接到 postgres?
- python - TypeError:元组索引必须是整数或切片,而不是 str scipy.optimize
- android - Android JSON 数组计数
- javascript - 使用 Winston Logger 登录 /var/log 失败
- scala - 荷兰国旗问题的惯用 Scala 解决方案