使用熊猫计算NPS

时间:2018-11-22 07:43:17

标签: python pandas

我对Python来说非常陌生,并且正在研究如何计算NPS分数。

计算公式为:

  

(分数计数9-10 /总分数计数0-10)-(分数计数   每个委员会0-6 /总得分0-10)。

我正在使用的数据框:

enter image description here

需要分别为每个理事会计算NPS。 这是我在这里的第一篇文章,希望这是有意义的。如果有人能指出我正确的方向,那将不胜感激。

干杯, 本。

2 个答案:

答案 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')