我定义了以下公式来计算净推荐值(“NPS”):
def nps_calc(data):
promoter_share = data[data.nps > 8].count()/len(data)
detractor_share = data[data.nps < 7].count()/len(data)
nps_score = (round((promoter_share - detractor_share)*100,0))
return nps_score
我在 groupby 语句中应用了上述公式,以根据“nps”列计算各个月份的 NPS 分数。“月”列只是一个整数 (1-12)。
df.groupby(['Country','Segment','Month']).apply(nps_calc).nps
我坚持的是从这个单月的观点进入一个3 个月的滚动观点。这意味着,在每月 3 个月的滚动窗口中应用 NPS 公式,并从过去 3 个月的所有“推荐者”的百分比份额减去过去 3 个月的所有“批评者”的百分比份额得出 NPS。
请注意:这里我不是在谈论移动平均线(平均 3 个月的分数不一样,结果略有不同)。
我在“.rolling()”、“.apply()”、最新的 Pandas 版本(滚动计算方面有一些改进?)以及滚动 NPS 计算的另一个自定义定义之间有点迷失了?
您认为解决此问题的最佳方法是什么?
这是输入数据的样子。表格很大,但这些是感兴趣的变量。从 2020 年开始,有多个国家、地区和月份。NPS 评级是 0-10 的整数。
| 国家 | 细分 | 月 | 核动力源 |
| 1 | 1 | 1 | 7 |
| 1 | 1 | 1 | 4 |
| 1 | 1 | 1 | 9 |
| 1 | 2 | 1 | 10 |
| 1 | 2 | 2 | 7 |
| 1 | 2 | 2 | 5 |
| 1 | 1 | 3 | 1 |
| 1 | 2 | 3 | 9 |
| 1 | 2 | 1 | 6 |
| 2 | 2 | 2 | 8 |
| 2 | 1 | 3 | 0 |