我有两列,例如agent_email和effortscore。在工作分数中,Y表示不满意,N表示满意。
列看起来像这样:
agent_email effortscore.
ab 1
ab 0
xy 1
xy 0
formula=(total 1's / total response)*100.
我希望输出像
ab 50% csat
xy 100% csat
答案 0 :(得分:4)
我认为您需要汇总mean
才能正常工作,因为只有1
和0
值和1
的数量除以总数是mean
公式:
df = pd.DataFrame({'agent_email':['ab@gmail.com','ab@gmail.com','xy@gmail.com'],
'effortscore':[1,0,1]})
df1 = df.groupby('agent_email')['effortscore'].mean().mul(100).reset_index()
print (df1)
agent_email effortscore
0 ab@gmail.com 50.0
1 xy@gmail.com 100.0
由于所讨论的数据不同,因此需要eq
与==
进行比较并汇总mean
:
print (df)
agent_email effortscore
0 ab Y
1 ab N
2 xy Y
3 xy N
df1 = df['effortscore'].eq('Y').groupby(df['agent_email']).mean().mul(100).reset_index()
print (df1)
agent_email effortscore
0 ab 50.0
1 xy 50.0
答案 1 :(得分:1)
使用pandas groupby和sum函数可以做到这一点。
df2 = df.groupby('email').agg({'sat': ['sum','count']})
# flatten the structure of dataframe
df2.columns = ['_'.join(tup).rstrip('_') for tup in df2.columns.values]
# email out from index
df3=df2.reset_index()
# create new df based on calculated values
df3['csat']=df3.sat_sum/df3.sat_count*100