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
参数,非常少用,暂时先不讲