如何按条件删除Pandas DataFrame中各评论组的最高分对应行?
删除DataFrame分组内score最高的行
你已经通过groupby('review_num')['score'].idxmax()定位到了每个分组中score最高的行的索引,接下来可以用两种方式完成删除操作:
方法1:直接删除定位到的索引
利用Pandas的drop()方法,传入你得到的索引列表即可:
token_max_score = df.groupby('review_num', sort=False)['score'].idxmax() # 生成新的DataFrame(不修改原数据) df_filtered = df.drop(token_max_score) # 或者原地修改原DataFrame # df.drop(token_max_score, inplace=True)
这种方法适合每个分组只有一个score最大值的场景,idxmax()会返回每个分组中第一个出现最大值的行索引。
方法2:删除分组内所有score等于最大值的行
如果存在同一分组内多个行score同为最大值的情况,上面的方法只会删除第一个最大值行。要删除所有最大值行,可以结合transform()和布尔索引:
# 计算每个分组的score最大值,并映射到每一行 group_max = df.groupby('review_num')['score'].transform('max') # 过滤掉score等于分组最大值的行 df_filtered = df[df['score'] != group_max]
验证结果
执行上述代码后,你可以通过print(df_filtered)查看处理后的数据,确认每个分组内score最高的行已被移除。
内容的提问来源于stack exchange,提问作者SLA
相关产品推荐
相关产品推荐

