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

如何按pf_customer_id分组并获取各分组Top5高值列?

按pf_customer_id分组提取数值Top5列的解决方案

解决思路

你之前尝试的转置操作容易引发索引混乱,更稳妥的方式是先将宽表转成长格式,分组后排序取Top5,再根据需求转回宽格式,或者直接保留长格式结果。

代码实现(附示例数据)

先构造模拟的DataFrame(和你的数据结构对齐):

import pandas as pd

# 模拟你的数据结构:pf_customer_id为分组键,其余为数值列
df = pd.DataFrame({
    'pf_customer_id': ['C001', 'C001', 'C002', 'C002'],
    'product_a': [120, 150, 90, 85],
    'product_b': [80, 70, 130, 140],
    'product_c': [200, 180, 70, 65],
    'product_d': [95, 100, 160, 170],
    'product_e': [110, 90, 100, 110],
    'product_f': [75, 85, 120, 130],
    'product_g': [130, 140, 80, 75]
})

场景1:需要长格式的Top5结果(清晰展示每个分组的Top5列及对应数值)

# 1. 宽表转长表:保留分组ID,把所有数值列转成"列名-数值"的行
long_df = df.melt(id_vars='pf_customer_id', var_name='column_name', value_name='value')

# 2. 分组后排序取Top5
top5_long = long_df.groupby('pf_customer_id').apply(
    lambda g: g.sort_values('value', ascending=False).head(5)
).reset_index(drop=True)

输出示例(长格式):

pf_customer_idcolumn_namevalue
C001product_c200
C001product_c180
C001product_g140
C001product_a150
C001product_d100
C002product_d170
C002product_b140
C002product_f130
C002product_e110
C002product_a90

场景2:需要宽格式的Top5结果(只保留每个分组的Top5数值列)

如果每个分组只有一行数据(即每个pf_customer_id对应唯一一行),用以下代码:

def extract_top5_cols(g):
    # 取分组的唯一行,排除分组ID列后按数值降序排序,取前5列名
    row = g.iloc[0]
    top_cols = row.drop('pf_customer_id').sort_values(ascending=False).head(5).index
    # 返回只包含分组ID和Top5列的子表
    return g[['pf_customer_id'] + list(top_cols)]

top5_wide = df.groupby('pf_customer_id').apply(extract_top5_cols).reset_index(drop=True)

如果每个分组有多行数据,需要先按列的总和/均值排序取Top5列,调整函数:

def extract_top5_cols_by_sum(g):
    # 计算分组内各数值列的总和,降序排序取前5列名
    col_sums = g.drop('pf_customer_id', axis=1).sum().sort_values(ascending=False).head(5).index
    return g[['pf_customer_id'] + list(col_sums)]

top5_wide_sum = df.groupby('pf_customer_id').apply(extract_top5_cols_by_sum).reset_index(drop=True)

关键提示

  • 转长格式是处理列筛选类分组问题的通用方案,避免了转置操作带来的索引错位问题
  • 需根据你的实际数据情况选择排序逻辑:单行列内排序/多行列聚合排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:35