计算重复购买概率

时间:2021-06-03 13:56:04

标签: python pandas

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

示例:

  • 下 1 个订单的客户数量:1,000
  • 下 2 个订单的客户数量:350
  • 下 3 个订单的客户数量:130

在本例中,一生中下过一次订单的客户再次下单的概率为:(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

最终结果应该是这样的:

<头>
顺序 order_total repeat_purchase_prob
1 1000 0.37
2 350 0.40
3 130 0.43

等等..

1 个答案:

答案 0 :(得分:1)

尝试反转 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 通过 div 填充 0

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)