📌  相关文章
📜  对 pandas DataFrame 中的行进行排序(1)

📅  最后修改于: 2023-12-03 15:09:28.063000             🧑  作者: Mango

对 pandas DataFrame 中的行进行排序

在数据分析中,对于一个数据集,经常需要对其中的行进行排序,以便更好地进行分析和展示。Pandas是一个常用的数据分析工具,它提供了丰富的API来实现对DataFrame中行的排序。

1. 按照某列进行排序

我们可以使用 sort_values() 方法来按照某一列进行排序,该方法的参数 by 接收一个或多个用于排序的列名或者列索引。例如:

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 20, 30]})

df.sort_values(by='name', inplace=True)

print(df)

输出:

       name  age
0     Alice   25
1       Bob   20
2  Charlie   30

上述代码会按照 name 列中的字母顺序进行升序排序。如果需要降序排序,可以添加参数 ascending=False。例如:

df.sort_values(by='name', ascending=False, inplace=True)
2. 按照多列进行排序

在实际应用中,我们通常需要按照多列进行排序。可以按照下面的方式来排序,即先按照第一列进行排序,如果出现相同的值,则继续按照第二列进行排序,以此类推。

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Alice', 'Charlie'], 
                   'age': [25, 20, 30, 25],
                   'salary': [5000, 6000, 5500, 4500]})

df.sort_values(by=['name', 'age'], inplace=True)

print(df)

输出:

      name  age  salary
0    Alice   25    5000
2    Alice   30    5500
1      Bob   20    6000
3  Charlie   25    4500

上述代码会先按照 name 列进行升序排序,如果出现相同的 name 值,则继续按照 age 列进行排序。

3. 按照索引进行排序

DataFrame的索引也可以用来进行排序。可以使用 sort_index() 方法来按照索引进行排序。例如:

df.sort_index(inplace=True)

print(df)

输出:

      name  age  salary
0    Alice   25    5000
1      Bob   20    6000
2    Alice   30    5500
3  Charlie   25    4500

上述代码会按照索引进行升序排序。

4. 只对部分行进行排序

有时候我们需要对 DataFrame 中的一部分行进行排序,而不是对整个 DataFrame 进行排序。这时候,我们可以使用 nsmallest()nlargest() 方法来实现。

nsmallest(n, columns) 方法返回排序后前n行,按照指定列(如有相同的值,按照第二列排序)。

nlargest(n, columns) 方法返回排序后前n行,按照指定列(如有相同的值,按照第二列排序)。

例如,我们希望找出工资最高的前两名员工:

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'salary': [5000, 6000, 5500]})

top_2 = df.nlargest(2, columns='salary')

print(top_2)

输出:

     name  salary
1     Bob    6000
2  Alice    5500

上述代码中,我们使用了 nlargest() 方法来找出工资最高的前两名员工。

5. 小结

本文介绍了 Pandas 中对 DataFrame 中行进行排序的几种方式,包括按照某一列、多列及索引排序,以及对部分行进行排序。

总结一下,排序的过程都离不开 sort_values()sort_index() 这两个方法,关键是参数的设置,我们要了解如何使用这些参数来控制排序的行为。来挖掘数据背后的价值吧!