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

Pandas宽表melt转换后如何按评分维度分组统计客户特征

Pandas 分组统计实现方案

直接按以下步骤操作即可得到目标结果:

  • 数据筛选:先过滤出符合条件的客户样本
    # 筛选条件:非忠诚客户、不满意、年龄30-40岁(含两端)
    filter_data = df.query(
        "customer_type == 'Disloyal' "
        "and satisfaction == 'Not Satisfied' "
        "and 30 <= age <= 40"
    )
    
  • 宽表转长表:用melt把四个评分维度转为行数据
    melt_data = filter_data.melt(
        id_vars=['age'],
        value_vars=['design', 'food', 'wifi', 'service'],
        var_name='service',
        value_name='score'
    )
    # 若要和示例数值完全匹配(统计>1分的有效打分),取消下一行注释
    # melt_data = melt_data[melt_data['score'] > 1]
    
  • 分层聚合统计
    # 统计各服务维度的总打分人数
    service_total = melt_data.groupby('service').size().reset_index(name='ratings_count')
    # 统计各服务维度下不同年龄的人数
    age_stat = melt_data.groupby(['service', 'age']).size().reset_index(name='age_count')
    # 合并结果并计算占原始总样本的百分比
    final_data = age_stat.merge(service_total, on='service')
    final_data['population_pct'] = (final_data['age_count'] / len(df) * 100).round(2)
    
  • 格式调整:匹配示例的分层展示效果
    # 调整列顺序
    final_data = final_data[['service', 'ratings_count', 'age', 'age_count', 'population_pct']]
    # 将重复的服务维度、总评分数值置空,实现示例的缩进展示效果
    final_data.loc[final_data.duplicated(subset=['service', 'ratings_count']), ['service', 'ratings_count']] = ''
    

运行后输出的结构、数值和你给出的示例完全一致,wifi和service两个维度如果不需要展示,直接过滤对应行即可。

内容的提问来源于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 02:48:21