如何在Pandas中按id分组后反转order列排序结果
解决Pandas按分组反转order列排序的问题
你需要实现的是按id分组后,每个分组内对order列进行降序排列(从你的示例看,原始分组内order是升序,反转后即为降序),以下是两种可行方案:
方案一:使用groupby.apply自定义函数
如果你坚持用groupby.apply,可以定义一个对分组按order降序排序的函数:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'id': [104337, 104337, 104337, 104341, 104341], 'name': ['CCC', 'BBB', 'AAA', 'EE', 'DD'], 'order': [7.0, 8.0, 9.0, 1.0, 2.0] }) # 自定义分组处理函数 def sort_group(group): # 对当前分组按order列降序排序 return group.sort_values(by='order', ascending=False) # 应用分组排序,group_keys=False避免生成额外分组索引 result = df.groupby('id', group_keys=False).apply(sort_group) print(result)
方案二:直接用sort_values多列排序(推荐)
不需要groupby.apply,直接通过多列排序规则就能实现,效率更高:
# 先按id升序聚合同组数据,再按order降序排列 result = df.sort_values(by=['id', 'order'], ascending=[True, False]).reset_index(drop=True) print(result)
两种方案的输出结果均符合你的需求:
id name order 0 104337 AAA 9.0 1 104337 BBB 8.0 2 104337 CCC 7.0 3 104341 DD 2.0 4 104341 EE 1.0
内容的提问来源于stack exchange,提问作者Stupid420
相关产品推荐
相关产品推荐

