Pandas:如何按两列对DataFrame排序(首列优先,重复看次列)
用Pandas按多列优先级排序的实现方法
嘿,这个需求在Pandas里处理起来超简单!咱们直接用sort_values()方法就能完美实现你要的「优先按第一列排序,仅当第一列值重复时再参考第二列」的规则。
核心用法
你只需要把要排序的列名按优先级顺序放到by参数的列表里就行——列表的第一个元素是最高优先级的列,第二个是次优先级,以此类推。
基本语法:
# 假设你的DataFrame是df,要按col1优先、col2次之排序 df_sorted = df.sort_values(by=['col1', 'col2'])
自定义排序方向
默认情况下所有列都是升序排序,如果需要给不同列指定不同的排序方向,可以用ascending参数(同样是列表,顺序和by对应):
# col1升序,col2降序 df_sorted = df.sort_values(by=['col1', 'col2'], ascending=[True, False])
实操示例
给你举个具体的例子,一看就懂:
import pandas as pd # 创建示例DataFrame data = { 'Name': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob'], 'Score': [85, 78, 92, 88, 82] } df = pd.DataFrame(data) # 按Name优先,Score次之排序 df_sorted = df.sort_values(by=['Name', 'Score']) print(df_sorted)
输出结果会是:
Name Score 0 Alice 85 2 Alice 92 1 Bob 78 4 Bob 82 3 Charlie 88
可以看到,先把相同Name的行归到一起,然后在每个Name组内按Score升序排列,完全符合你的要求。
原地排序小技巧
如果你不想创建新的DataFrame,而是直接修改原数据,可以加上inplace=True参数:
df.sort_values(by=['col1', 'col2'], inplace=True)
内容的提问来源于stack exchange,提问作者Ucchash Sarkar
相关产品推荐
相关产品推荐

