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

使用布尔索引或groupby统计特定客户数并识别低评分产品

基于Pandas的客户数据统计实现方案

该场景优先使用布尔索引完成筛选统计,逻辑直观且执行效率更高,具体实现步骤如下:

1. 统计符合多条件的客户总数量

所有筛选条件取交集(同时满足),使用&连接各单条件判断表达式,注意每个单条件需用括号包裹,避免Python运算符优先级导致的逻辑错误。
各筛选条件对应代码逻辑:

  • 客户类别为非忠诚:df['Customer Cat'] == 'Disloyal'
  • 年龄在30-40岁闭区间:df['Age'].between(30, 40)
  • 满意度为不满意:df['Satisfaction'] == 'Dissatisfied'
  • Prod A Rank评分在0-2区间:df['Prod A Rank'].between(0, 2)
  • Prod B Rank评分在0-2区间:df['Prod B Rank'].between(0, 2)

完整实现代码:

import pandas as pd

# 加载数据集,此处用题目给出的示例数据做演示
df = pd.DataFrame(
    [
        ["Disloyal", 28, "Dissatisfied", 1, 2],
        ["Loyal", 30, "Satisfied", 3, 5],
        ["Disloyal", 36, "Dissatisfied", 0, 2]
    ],
    columns=["Customer Cat", "Age", "Satisfaction", "Prod A Rank", "Prod B Rank"]
)

# 生成筛选掩码
filter_mask = (
    (df["Customer Cat"] == "Disloyal")
    & (df["Age"].between(30, 40))
    & (df["Satisfaction"] == "Dissatisfied")
    & (df["Prod A Rank"].between(0, 2))
    & (df["Prod B Rank"].between(0, 2))
)

# 计算符合条件的客户总数(布尔序列True等价于1,求和即为符合条件的行数)
target_cust_num = filter_mask.sum()

针对题目给出的示例数据集,运行后得到符合条件的客户数为1,对应年龄36岁的非忠诚不满意客户。

2. 识别目标客户评分≤2的所有产品

先通过掩码提取符合条件的目标客户子集,再判断两个产品列的评分是否满足≤2的要求,汇总去重后即可得到结果:

# 提取目标客户子集
target_cust_df = df[filter_mask]

low_score_prod = []
# 遍历子集逐行判断产品评分
for _, row in target_cust_df.iterrows():
    if row["Prod A Rank"] <= 2:
        low_score_prod.append("Prod A")
    if row["Prod B Rank"] <= 2:
        low_score_prod.append("Prod B")

# 去重得到最终产品列表
low_score_prod = list(set(low_score_prod))

针对示例数据集,最终得到的低评分产品为["Prod A", "Prod B"],该客户对两款产品的评分分别为0、2,均满足≤2的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:42:17