我想根据以下示例计算重复购买概率。我想在 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
最终结果应该是这样的:
顺序 | order_total | repeat_purchase_prob |
---|---|---|
1 | 1000 | 0.37 |
2 | 350 | 0.40 |
3 | 130 | 0.43 |
等等..
答案 0 :(得分:1)
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)