0.写在前面
DataFrame的排序操作比较简单,不过几函数尔
这是本例要用到的DataFrame:
import pandas as pd
import numpy as np
rst = np.random.RandomState(seed=2333) # 加入seed,使得生成的数据相同
example_array = rst.uniform(size=(5,5))
index = ['张飞', '关羽', '赵云', '黄忠', '马超']
columns= ['血量', '智力', '敏捷', '攻击', '防御']
example_df = pd.DataFrame(example_array, columns=columns, index=index)
排序操作,有两种方式,一种是对内容进行排序,另一种是对索引进行排序
1.DataFrame按内容进行排序
使用df.sort_values(by, ascending=True)进行排序,该函数有很多参数,最常用的就这俩,其余的参数博客结尾会讲到(至于为什么最后讲,我先卖个关子)
-
by:指定单个键或者多个键进行排序 -
ascending=True默认为升序,False为降序
# 指定单个键
# 按照血量进行排序,使用`ascending`指定降序
example_df = example_df.sort_values(by='血量', ascending=False)
# 指定多个键
# 按照血量、智力进行排序,使用`ascending`指定血量降序,智力升序
example_df.sort_values(by=['血量', '智力'], ascending=[False, True])
# 若仅要求降序,`ascending`可以只传入一个参数 False
example_df.sort_values(by=['血量', '智力'], ascending=False)2.DataFrame按索引进行排序
使用df.sort_index(ascending=True)进行排序,该函数有很多参数,最常用的就这一个,其余的参数博客结尾会讲到
-
ascending=True默认为升序,False为降序
# 对索引进行降序行排序
example_df.sort_index(ascending=False)3.Series按内容进行排序
使用series.sort_values(ascending=True)进行排序,由于其只有一列数据,所以无需指定字段,所以更简单一些,它也有一些其他参数
series = example_df['血量']
# 顺便复习下上篇博客,这样可以获得行series
# series = example_df.loc['张飞']
# 进行排序
series.sort_values() # 没错就是这么简单粗暴4.Series按索引进行排序
使用series.sort_index(ascending=True)进行排序
series = example_df['血量']
series.sort_index() # 没错还是这么简单粗暴5.其他参数
先吓唬一下诸位:鼠标可以直接往下拉
dataframe.sort_values(
by,
axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
ignore_index=False,
)dataframe.sort_index(
axis=0,
level=None,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
sort_remaining=True,
ignore_index:bool=False,
)series.sort_values(
axis=0,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
ignore_index=False,
)series.sort_index(
axis=0,
level=None,
ascending=True,
inplace=False,
kind='quicksort',
na_position='last',
sort_remaining=True,
ignore_index:bool=False,
)每个方法都一堆参数,不像之前想的那样简洁,但是,他们却有很多共同的参数,这也是我要放在最后一起讲的原因。
-
axis参数,和numpy中的用法相同,若指定为axis=1,则在水平方向进行排序,但是对应的by参数,要填入DataFrame的index元素,本例中,若指定axis=1,则by可以为"张飞" -
inplace参数,默认为False,则排序之后,会返回一个新DataFrame,而不会覆盖原DataFrame -
kind参数,选择排序算法,默认为'quicksort',可选{'quicksort', 'mergesort', 'heapsort'},"mergesort"是唯一稳定的算法 -
ignore_index参数,是否忽略原索引,默认为False。若为True,则索引会变为0,1,...,n-1 -
na_position参数,将空缺值Nan放在哪,可选{'first', 'last'},默认为last,排序时将空缺值放于最后
仅在.sort_index方法中有的level参数和sort_remaining参数,非常少用,暂时先不讲
















