Python中pandas如何按一列分组后按另一列对数据排序?
实现方案
首先导入pandas并构造示例数据:
import pandas as pd df_dict = {'Features':['A','A','A','C','C','C','C','B','B','B'], 'Date':['1/3/2023','1/3/2022','1/3/2021','1/3/2024','5/8/2020','5/8/2021','5/8/2022','6/1/2020','6/1/2019','5/8/2023'], 'Value':[7,8,2,6,8,9,8,9,0,10]} df = pd.DataFrame(df_dict)
方法1:groupby+组内排序(适配复杂分组逻辑)
适合需要对不同分组做差异化排序规则的场景,代码如下:
# 按Features分组后,每个组内按Value升序排序 sorted_df = df.groupby('Features', sort=False, group_keys=False)\ .apply(lambda x: x.sort_values('Value', ascending=True))\ .reset_index(drop=True)
参数说明:
sort=False:groupby默认会对分组键Features按字母顺序排序,加该参数会保留原始数据中Features的出现顺序(A→C→B),不需要可删除ascending=True:控制组内排序方向,升序填True、降序填Falsereset_index(drop=True):重置行索引为连续数字
方法2:多列整体排序(性能更高)
如果不需要特殊分组处理,直接对两个字段排序即可达到和分组后组内排序完全一致的效果,性能比apply方法更高:
# 先按Features分组排序,同分组内再按Value升序排序 sorted_df = df.sort_values(by=['Features', 'Value'], ascending=[True, True]).reset_index(drop=True)
排序后输出示例(Value升序):
序号 Features Date Value 0 A 1/3/2021 2 1 A 1/3/2023 7 2 A 1/3/2022 8 3 C 1/3/2024 6 4 C 5/8/2020 8 5 C 5/8/2022 8 6 C 5/8/2021 9 7 B 6/1/2019 0 8 B 6/1/2020 9 9 B 5/8/2023 10
内容的提问来源于stack exchange,提问作者user86907
相关产品推荐
相关产品推荐

