Pandas按product_id分组不改变数据类型,实现按值排序取Top10
解决按唯一product_id分组并排序的问题
核心问题分析
用groupby(['product_id']).agg(['unique'])会生成多级列,且值为元组类型,导致排序报错;nunique()仅统计唯一值数量,不符合保留原始值的需求。以下是两种可行方案:
方案1:直接提取唯一值(推荐)
如果每个product_id对应的Price x Quantity只有一个唯一值,直接用agg('first')或agg(lambda x: x.unique()[0])获取单一值,避免元组和多级列:
# 分组并保留Price x Quantity的原始值 products = q3_df.groupby(['product_id'], as_index=False).agg({'Price x Quantity': 'first'}) # 按Price x Quantity降序排序,取前10 top_10_products = products.sort_values(by='Price x Quantity', ascending=False).head(10)
方案2:处理已生成的多级列和元组
如果已经用agg(['unique'])生成了结果,可以先扁平化列名,再提取元组内的唯一值:
# 分组生成结果 products = q3_df.groupby(['product_id']).agg(['unique']).reset_index() # 扁平化多级列名 products.columns = ['_'.join(col) for col in products.columns] # 提取元组中的唯一值(假设每个元组仅含一个元素) products['Price x Quantity_unique'] = products['Price x Quantity_unique'].apply(lambda x: x[0]) # 排序并取前10 top_10_products = products.sort_values(by='Price x Quantity_unique', ascending=False).head(10)
注意事项
如果同一个product_id对应多个不同的Price x Quantity值,需要先明确业务需求(比如取最大值、求和等),再调整聚合函数。
内容的提问来源于stack exchange,提问作者Rohit Guptha
相关产品推荐
相关产品推荐

