我对Python来说非常陌生,并且正在研究如何计算NPS分数。
计算公式为:
(分数计数9-10 /总分数计数0-10)-(分数计数 每个委员会0-6 /总得分0-10)。
我正在使用的数据框:
需要分别为每个理事会计算NPS。 这是我在这里的第一篇文章,希望这是有意义的。如果有人能指出我正确的方向,那将不胜感激。
干杯, 本。
答案 0 :(得分:1)
假设数据位于data.csv
中:
import pandas as pd
from collections import defaultdict
df = pd.read_csv('data.csv')
high_nps = defaultdict(lambda: 0)
low_nps = defaultdict(lambda: 0)
high_nps.update(dict(df[df['NPS'] >= 9].groupby('CouncilName').count().reset_index()[['CouncilName', 'NPS']].values))
low_nps.update(dict(df[df['NPS'] <= 6].groupby('CouncilName').count().reset_index()[['CouncilName', 'NPS']].values))
total_nps = dict(df.groupby('CouncilName').count().reset_index()[['CouncilName', 'NPS']].values)
nps_score = {council: (high_nps[council] - low_nps[council]) / float(total_nps[council]) for council in total_nps}
print(nps_score)
打印:
{'Council A': 0.0, 'Council B': -1.0, 'Council C': -1.0}
答案 1 :(得分:0)
def npsForField(df,column,fid):
nps={}
# first make sure our column has numeric values:
subject = pd.DataFrame(columns=[column],data=pd.to_numeric(df[df['field_id']==fid][column]))
# calculate all NPS components:
nps['total'] = subject[column].count()
nps['detractors'] = subject[subject[column]<7][column].count()
nps['passives'] = subject[(subject[column]>6) & (subject[column]<9)][column].count()
nps['promoters'] = subject[subject>8][column].count()
nps['nps'] = (nps['promoters'] - nps['detractors']) / nps['total']
return nps
然后假设您要计算df
的{{1}}列的NPS,但只计算answer
的NPS。像这样称呼它:
df[df['field_id']==fid]
抽样结果:
npsForField(df, column='answer', fid='abc123')