计算熊猫的月流失率

avi*_*iss 1 python-3.x pandas churn

这是我的数据框中的数据示例:

test = pd.DataFrame({
    'month': [1,2,3,4,5,6,7,8,9],
    'new': [23,45,67,89,12,34,56,90,12],
    'drop': [2,4,7,9,1,4,6,9,1],
})

month   new drop
0   1   23  2
1   2   45  4
2   3   67  7
3   4   89  9
4   5   12  1
5   6   34  4
6   7   56  6
7   8   90  9
8   9   12  1
Run Code Online (Sandbox Code Playgroud)

我需要计算每月的流失率。我需要对列中的 2 行求和new,然后将值drop除以这个总和(以 % 为单位)。

    month 1: 2*100/23
    month 2: 4*100/(23+45-2)
    month 3: 7*100/(23+45+67-2-4)

    etc.
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出一种优雅的方式来做到这一点吗?

har*_*pan 5

你需要:

test['drop'].mul(100).div((test['new'].cumsum() - test['drop'].cumsum().shift()).fillna(test['new']))
Run Code Online (Sandbox Code Playgroud)

输出:

0    8.695652
1    6.060606
2    5.426357
3    4.265403
4    0.467290
5    1.619433
6    2.006689
7    2.349869
8    0.259067
dtype: float64
Run Code Online (Sandbox Code Playgroud)

解释:

(test['new'].cumsum() - test['drop'].cumsum().shift()).fillna(test['new'])
Run Code Online (Sandbox Code Playgroud)

提供newwith 减法的 cumsum与先前的dropcumsum。

输出(添加注释以供解释):

0     23.0 # 23
1     66.0 # 23+45-2
2    129.0 # 23+45+67-2-4
3    211.0
4    214.0
5    247.0
6    299.0
7    383.0
8    386.0
Run Code Online (Sandbox Code Playgroud)