首页 > 解决方案 > 计算重复购买概率

问题描述

我想根据以下示例计算重复购买概率。我想在 Pandas DataFrame 上运行此计算,但我很难弄清楚如何为每一行增量地执行此操作。

例子:

在这个例子中,客户在其一生中下过一个订单到下第二个订单的重复订单概率为:(350 + 130) / (350+130+1,000) = 32.43%

这是一个使用 iloc 获得与示例相同的结果的示例,但它不会遍历数据帧。

lst = [[1, 1000], [2, 350],
       [3, 130], [4,70], [5,30]]
    
df = pd.DataFrame(lst, columns =['order', 'order_total'])
df['repeat_purchase_prob'] = df['order_total'].iloc[1:].sum() / df['frequency_total'].iloc[0:].sum()

这是我读过的帖子的链接:https ://blog.digitalj2.com/understand-the-power-of-repeat-order-probability

最终结果应如下所示:

命令 合计订单 重复购买概率
1 1000 0.37
2 350 0.40
3 130 0.43

等等..

标签: pythonpandas

解决方案


尝试反转cumsum然后shift划分:

rcs = df.loc[::-1, 'order_total'].cumsum()[::-1]
df['repeat_purchase_prob'] = rcs.shift(-1) / rcs

df

   order  order_total  repeat_purchase_prob
0      1         1000              0.367089
1      2          350              0.396552
2      3          130              0.434783
3      4           70              0.300000
4      5           30                   NaN

NaN可选用0via填充div

df['repeat_purchase_prob'] = rcs.shift(-1).div(rcs, fill_value=0)

df

   order  order_total  repeat_purchase_prob
0      1         1000              0.367089
1      2          350              0.396552
2      3          130              0.434783
3      4           70              0.300000
4      5           30              0.000000

完整的工作示例:

import pandas as pd

lst = [[1, 1000], [2, 350], [3, 130], [4, 70], [5, 30]]

df = pd.DataFrame(lst, columns=['order', 'order_total'])

rcs = df.loc[::-1, 'order_total'].cumsum()[::-1]
df['repeat_purchase_prob'] = rcs.shift(-1) / rcs

print(df)

推荐阅读