You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas统计用户购买某品类时其他品类的销售额?

Pandas实现用户多品类销售关联统计需求

先明确咱们的需求和数据:

原始数据

id cat_1 cat_2 cat_3
1 1 10 100
2 2 0 0
3 0 20 0
5 3 0 0
6 4 0 0
9 5 0 0
10 0 30 200
11 6 0 300
12 7 0 0
13 8 40 400

需求说明

统计当用户购买某品类(该品类数值不为0)时,所有品类的总销售额。比如筛选出购买过cat_1的用户后,统计这些用户在cat_1、cat_2、cat_3的总销售额,最终输出一个以品类为行和列的统计表格,期望输出如下:

cat_1 cat_2 cat_3
cat_1 36 50 800
cat_2 9 100 700
cat_3 15 80 1000

Pandas实现步骤

我给你拆解成清晰的步骤,直接复制代码就能跑通:

1. 导入Pandas并构造数据框

首先把原始数据转换成Pandas能处理的DataFrame:

import pandas as pd

# 构造原始销售数据
data = {
    'id': [1, 2, 3, 5, 6, 9, 10, 11, 12, 13],
    'cat_1': [1, 2, 0, 3, 4, 5, 0, 6, 7, 8],
    'cat_2': [10, 0, 20, 0, 0, 0, 30, 0, 0, 40],
    'cat_3': [100, 0, 0, 0, 0, 0, 200, 300, 0, 400]
}
df = pd.DataFrame(data)

2. 核心统计逻辑

咱们的核心思路是:对每个品类,筛选出购买过该品类的用户,再统计这些用户在所有品类的总销售额,最后把结果整理成目标格式:

# 提取所有品类列(排除id列)
category_columns = [col for col in df.columns if col.startswith('cat_')]

# 初始化结果字典,用来存储每个品类对应的统计结果
result_dict = {}

# 遍历每个品类作为目标品类
for target_category in category_columns:
    # 筛选出购买过当前目标品类的用户行
    filtered_rows = df[df[target_category] != 0]
    # 统计这些用户在所有品类的总销售额
    total_sales = filtered_rows[category_columns].sum()
    # 将结果存入字典
    result_dict[target_category] = total_sales

# 将字典转换为DataFrame,转置后得到行和列都是品类的表格
result_df = pd.DataFrame(result_dict).T

# 打印结果,和期望输出一致
print(result_df)

运行这段代码后,你会得到和期望完全一致的输出:

cat_1  cat_2  cat_3
cat_1      36     50    800
cat_2       9    100    700
cat_3      15     80    1000

关键逻辑解释

  • 用startswith('cat_')提取品类列,避免把id列纳入统计;
  • 循环每个品类时,通过df[target_category] != 0筛选出有购买行为的用户;
  • 对筛选后的行求和,得到该品类用户群体的各品类总销售额;
  • 最后转置DataFrame,让品类同时作为行索引和列名,完美匹配需求格式。

内容的提问来源于stack exchange,提问作者nk23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:48:40