如何使用Pandas将分组后按指定列排序的前N行合并为列表单行
实现方案
报错原因
你遇到的'GroupedData' object is not subscriptable报错,核心原因是操作了不支持下标访问的分组对象,常见于混淆了PySpark和Pandas的分组API,或是Pandas分组后调用了错误的链式方法。以下是Pandas环境下的可运行实现:
代码实现
你已经完成DataFrame按amount列降序排序的前置操作,核心代码如下:
import pandas as pd # 示例数据构造,可替换为你的实际数据 df = pd.DataFrame({ 'store_id': ['00001', '00001', '00001', '00002', '00002', '00002'], 'item': ['shirt', 'sock', 'pants', 'shoe', 'hat', 'bag'], 'amount': [100, 80, 50, 90, 70, 30] }) # 你已经完成的前置排序步骤:df = df.sort_values('amount', ascending=False) n = 2 # 可按需调整取前N个的数值 result = df.groupby('store_id')['item'].apply(lambda x: x.head(n).tolist()).reset_index()
运行后result的输出格式和你要求的一致,store_id=00001对应的item值为['shirt', 'sock']。
补充说明
如果后续你需要处理未提前做全局排序的DataFrame,可以在分组后先排序再取topN,避免全局排序的性能损耗:
result = df.groupby('store_id', group_keys=False).apply( lambda x: x.sort_values('amount', ascending=False).head(n) ).groupby('store_id')['item'].apply(list).reset_index()
内容的提问来源于stack exchange,提问作者MS25
相关产品推荐
相关产品推荐

