看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
数据处理和分析中排序是最常见的操作之一,可以将我们关心的数据展示在前面或者后边。pandas 的 sort_values() 方法能够实现灵活的数据排序方案,不仅是简单的按列排序,还能指定自己的排序算法。
sort_values() 支持 DataFrame、Series 和 Index 对象:
sort_values() 的语法一般为:
sort_values(
self, # 对象自身
by,
axis: Axis = 0,
ascending=True,
inplace: bool = False,
kind: str = "quicksort",
na_position: str = "last",
ignore_index: bool = False,
key: ValueKeyFunc = None,
)
参数有:
numpy.sort
了解更多信息返回:
inplace=True
时返回 None以下是一些使用示例。
df = pd.DataFrame({
'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
'col2': [2, 1, 9, 8, 7, 4],
'col3': [0, 1, 9, 4, 2, 3],
'col4': ['a', 'B', 'c', 'D', 'e', 'F']
})
df
'''
col1 col2 col3 col4
0 A 2 0 a
1 A 1 1 B
2 B 9 9 c
3 NaN 8 4 D
4 D 7 2 e
5 C 4 3 F
'''
# 按 col1 排序
df.sort_values(by=['col1'])
'''
col1 col2 col3 col4
0 A 2 0 a
1 A 1 1 B
2 B 9 9 c
5 C 4 3 F
4 D 7 2 e
3 NaN 8 4 D
'''
# 多列排序
df.sort_values(by=['col1', 'col2'])
'''
col1 col2 col3 col4
1 A 1 1 B
0 A 2 0 a
2 B 9 9 c
5 C 4 3 F
4 D 7 2 e
3 NaN 8 4 D
'''
# 降序
df.sort_values(by='col1', ascending=False)
'''
col1 col2 col3 col4
4 D 7 2 e
5 C 4 3 F
2 B 9 9 c
0 A 2 0 a
1 A 1 1 B
3 NaN 8 4 D
'''
# 将 NA 放在前边
df.sort_values(by='col1',
ascending=False,
na_position='first')
'''
col1 col2 col3 col4
3 NaN 8 4 D
4 D 7 2 e
5 C 4 3 F
2 B 9 9 c
0 A 2 0 a
1 A 1 1 B
'''
使用键函数排序。
df.sort_values(by='col4',
key=lambda col: col.str.lower()
)
'''
col1 col2 col3 col4
0 A 2 0 a
1 A 1 1 B
2 B 9 9 c
3 NaN 8 4 D
4 D 7 2 e
5 C 4 3 F
'''
# 带关键参数的自然排序
# 使用 natsort <https://github.com/SethMMorton/natsort>
df = pd.DataFrame({
"time": ['0hr', '128hr', '72hr', '48hr', '96hr'],
"value": [10, 20, 30, 40, 50]
})
df
'''
time value
0 0hr 10
1 128hr 20
2 72hr 30
3 48hr 40
4 96hr 50
'''
from natsort import index_natsorted
df.sort_values(
by="time",
key=lambda x: np.argsort(index_natsorted(df["time"]))
)
'''
time value
0 0hr 10
3 48hr 40
2 72hr 30
4 96hr 50
1 128hr 20
'''
Index 对象也支持 sort_values(),但它的参数与逻辑稍有不同。
语法如:
Index.sort_values(return_indexer=False,
ascending=True,
na_position='last',
key=None)
参数的意义与上文的介绍基本相同,不同的的会有一个 return_indexerbool 参数:
它将返回索引的排序副本,并可以选择返回对索引本身进行排序的索引。
示例如下:
idx = pd.Index([10, 100, 1, 1000])
idx
# Int64Index([10, 100, 1, 1000], dtype='int64')
按升序对值进行排序(默认行为):
idx.sort_values()
Int64Index([1, 10, 100, 1000], dtype='int64')
按降序对值进行排序,并获得索引 idx 的排序依据。
idx.sort_values(ascending=False, return_indexer=True)
(Int64Index([1000, 100, 10, 1], dtype='int64'), array([3, 1, 0, 2]))
返回的是一个元组。
更新时间:July 5, 2022, 4:26 p.m. 标签:pandas python 排序