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

如何从产品数据中提取Top5产品并按分类聚合展示?

解决方案:按分类聚合并提取Top5产品

步骤1:数据预处理

先清洗产品列的脏数据,处理带空格的数值、空值,同时统一子分类的大小写:

import pandas as pd

# 假设原始数据已加载到df中
# 统一子分类为小写
df['子分类(subcategory)'] = df['子分类(subcategory)'].str.lower()

# 筛选所有产品列
product_cols = [col for col in df.columns if col.startswith('product')]

# 处理产品列的数值:空值转0,"1 1"格式转求和值
for col in product_cols:
    df[col] = df[col].fillna(0)
    df[col] = df[col].apply(lambda x: sum(map(int, str(x).split())) if isinstance(x, str) and x.strip() else int(x))

步骤2:计算分组基础统计量

按分类、子分类聚合,计算crn计数和各产品的求和值:

# 构建聚合字典
agg_dict = {'crn': 'count'}
for col in product_cols:
    agg_dict[col] = 'sum'

# 分组聚合并重置索引
grouped_stats = df.groupby(['分类(Category)', '子分类(subcategory)']).agg(agg_dict).reset_index()

# 重命名列名匹配需求
grouped_stats = grouped_stats.rename(columns={
    'crn': 'crn计数(crncount)',
    **{col: f'{col}求和(sumof{col})' for col in product_cols}
})

步骤3:提取每个分组的Top5产品

对每个分组,按产品求和值降序排序,取前5个产品名称:

def get_top_products(group, top_n=5):
    # 计算当前组各产品的求和值
    product_sums = group[product_cols].sum()
    # 降序排序后取前top_n个产品名称
    top_products = product_sums.sort_values(ascending=False).head(top_n).index.tolist()
    # 不足5个时补空值
    while len(top_products) < top_n:
        top_products.append('')
    # 生成对应列名并返回
    return pd.Series(
        top_products,
        index=[f'Top产品{i+1}(topproduct{i+1})' for i in range(top_n)]
    )

# 应用到每个分组
top_products_per_group = df.groupby(
    ['分类(Category)', '子分类(subcategory)']
).apply(get_top_products).reset_index()

步骤4:合并并整理最终结果

将基础统计量和Top5产品合并,调整列顺序匹配期望格式:

# 合并两个结果表
final_df = pd.merge(
    grouped_stats,
    top_products_per_group,
    on=['分类(Category)', '子分类(subcategory)']
)

# 调整列顺序
desired_columns = [
    '分类(Category)', '子分类(subcategory)', 'crn计数(crncount)',
    'Top产品1(topproduct1)', 'Top产品2(topproduct2)', 'Top产品3(topproduct3)',
    'Top产品4(topproduct4)', 'Top产品5(topproduct5)'
] + [f'{col}求和(sumof{col})' for col in product_cols]

final_df = final_df[desired_columns]

# 输出为HTML格式(匹配需求的表格结构)
print(final_df.to_html(
    classes='s-table',
    container_class='s-table-container',
    index=False,
    na_rep=''
))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:49:54