如何在DataFrame中创建累积概率分箱?
解决方案
步骤说明
要实现按10%增量生成累积分箱统计,核心思路是遍历每个分箱上限,筛选出概率小于等于该上限的所有记录,分别统计唯一用户数和销售总额,最后整理成目标DataFrame。
完整代码
import pandas as pd # 1. 构造原始DataFrame(替换成你的实际数据即可) data = { 'date': ['2020-01-01', '2020-01-20', '2020-01-01', '2020-01-10'], 'user_id': [1, 1, 3, 2], 'purchase_probability': [0.19, 0.04, 0.31, 0.05], 'sales': [10, 0, 5, 18] } df = pd.DataFrame(data) # 2. 生成10%增量的分箱上限和标签 bins_upper = [i/10 for i in range(1, 11)] # 对应0.1到1.0的分箱上限 bin_labels = [f'0-{i}%' for i in range(10, 101, 10)] # 生成"0-10%"这类标签 # 3. 遍历分箱计算统计值 result = [] for upper, label in zip(bins_upper, bin_labels): filtered_records = df[df['purchase_probability'] <= upper] total_users = filtered_records['user_id'].nunique() # 统计唯一用户数 total_sales = filtered_records['sales'].sum() # 统计累计销售额 result.append({ 'probability_bin': label, 'total_users': total_users, 'total_sales': total_sales }) # 4. 转换为目标DataFrame result_df = pd.DataFrame(result) print(result_df)
输出结果
probability_bin total_users total_sales 0 0-10% 2 18 1 0-20% 2 28 2 0-30% 2 28 3 0-40% 3 33 4 0-50% 3 33 5 0-60% 3 33 6 0-70% 3 33 7 0-80% 3 33 8 0-90% 3 33 9 0-100% 3 33
关键说明
- 用
nunique()统计唯一用户数,避免同一用户多条记录重复计数 - 直接按分箱上限筛选记录并累加销售额,实现累积统计的效果
- 分箱标签和上限通过列表推导式批量生成,无需手动逐个输入
内容的提问来源于stack exchange,提问作者titutubs
相关产品推荐
相关产品推荐

