关键词

Pandas 最常用的两种排序方法

Pandas提供了两种排序方式:按标签排序和按数值排序。

按标签排序

按标签排序使用 .sort_index() 方法,可以按照索引的标签进行排序,默认为升序排列。例如:

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({'col1': [3, 1, 2], 'col2': [5, 4, 6]}, index=['c', 'a', 'b'])
print(df)

# 按照索引标签进行升序排序
df_sorted = df.sort_index()
print(df_sorted)

# 按照索引标签进行降序排序
df_sorted_desc = df.sort_index(ascending=False)
print(df_sorted_desc)

输出:


   col1  col2
c     3     5
a     1     4
b     2     6

   col1  col2
a     1     4
b     2     6
c     3     5

   col1  col2
c     3     5
b     2     6
a     1     4

按数值排序

按数值排序使用 .sort_values() 方法,可以按照某一列的数值大小进行排序,默认为升序排列。例如:


import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({'col1': [3, 1, 2], 'col2': [5, 4, 6]}, index=['c', 'a', 'b'])
print(df)

# 按照 col1 列的数值进行升序排序
df_sorted = df.sort_values('col1')
print(df_sorted)

# 按照 col2 列的数值进行降序排序
df_sorted_desc = df.sort_values('col2', ascending=False)
print(df_sorted_desc)

输出:


   col1  col2
c     3     5
a     1     4
b     2     6

   col1  col2
a     1     4
b     2     6
c     3     5

   col1  col2
b     2     6
c     3     5
a     1     4

需要注意的是,按数值排序时如果有空值NaN,排序方法会将空值放在末尾,可以通过 na_position 参数指定空值放置的位置。例如:


import pandas as pd

# 创建一个示例DataFrame,包含一个NaN值
df = pd.DataFrame({'col1': [3, 1, 2, None], 'col2': [5, 4, 6, 3]}, index=['c', 'a', 'b', 'd'])
print(df)

# 按照 col1 列的数值进行升序排序,将空值放在末尾
df_sorted = df.sort_values('col1', na_position='last')
print(df_sorted)

# 按照 col2 列的数值进行降序排序,将空值放在首位
df_sorted_desc = df.sort_values('col2', ascending=False, na_position='first')
print(df_sorted_desc)

输出:

   col1  col2
c   3.0     5
a   1.0     4
b   2.0     6
d   NaN     3
   col1  col2
a   1.0     4
b   2.0     6
c   3.0     5
d   NaN     3
   col1  col2
b   2.0     6
c   3.0     5
a   1.0     4
d   NaN     3

指定排序算法

sort_values() 提供了参数kind用来指定排序算法。这里有三种排序算法:

  1. mergesort
  2. heapsort
  3. quicksort

默认为 quicksort(快速排序) ,其中 Mergesort 归并排序是最稳定的算法。

例如:

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')
print (sorted_df)

输出结果为:

   col1  col2
1     1     3
2     1     2
3     1     4
0     2     1

本文链接:http://task.lmcjl.com/news/4509.html

展开阅读全文