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用来指定排序算法。这里有三种排序算法:
- mergesort
- heapsort
- 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
本文链接:https://my.lmcjl.com/post/19976.html
展开阅读全文
4 评论