问题描述
我正在尝试计算一个比率或百分比,该比率或百分比采用具有至少两个可能值(食物或饮料)之一的按列分组(服务列)的出现次数,然后将其除以唯一值列中的“业务列”(Business Column)值,但出现了问题。
原始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']
但是,这并没有给我即时信息,因为在这种情况下,该服务仅提供df中cindy的所有行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
,
您在此处的代码中犯了一个小错误:
s=(df.assign(Service=df.Service.isin(['Food','Service':'count'}))
s['Service']/s['Business']
您需要将'Service':'count'
更改为'Service':'sum'
。 count 仅计算每个Rep的行数。使用 sum ,它可以计算每个销售代表所提供的食物或饮料服务的行数。