排序Pandas数据框

Pandas数据框可以按索引和值排序

图片作者

我们可以按行值/列值对Pandas数据框进行排序。同样,我们也可以按行索引/列索引进行排序。

图片作者

 

Pandas DataFrame按值排序

DataFrame。sort_values(by,axis = 0,ascending = True,inplace = False,kind =' quicksort ',na_position ='last',ignore_index = False,key = None)

图片来源:作者

返回类型为DataFrame或无。

如果排序的inplace返回类型为None,则为DataFrame。

1.按一列对数据框进行排序

通过从CSV文件读取来创建DataFrame。

import pandas as pd
df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data1.csv")
df

 

数据框

现在,按一列(EmpId)中的值对数据框进行排序。

df.sort_values('EmpID')

 

按“ EmpID”中的值对数据框进行排序

默认情况下,它将以升序排序。该索引也将保持不变。
返回类型是一个数据框。它不会修改原始数据框。

2.按一列按降序对数据框进行排序

按列EmpID降序对数据框进行排序。不得不提ascending=False

返回类型是一个数据框。它不会修改原始数据框。

df.sort_values(‘EmpID’,ascending=False)

按des顺序按“ EmpID”中的值对df进行排序

3.按两列对数据框进行排序

按列Skill和排序数据框EmpID。如果列Skill 中的值相同,则它将基于第二列中的值进行排序EmpID

df.sort_values(by=['Skill','EmpID'])

根据“技能”和“ EmpID”中的值对df进行排序

首先,它将基于“Skill”列中的值进行排序。由于JavaScript列中的值Skill相同,因此它将再次按值EmpID 升序排序。

返回类型是一个数据框。它不会修改原始数据框。

4.按两列以不同顺序对数据框进行排序

按列Skill和排序数据框EmpID。一列以升序排列,另一列以降序排列。

df.sort_values(by=['Skill','EmpID'],ascending=[True,False])

按两个差异顺序按两列中的值对df进行排序

首先,数据帧将基于“Skill” 列中的值以升序排序。由于JavaScript列中的值Skill相同,因此它将按值EmpID 降序排序。

返回类型是一个数据框。它不会修改原始数据框。

5.通过将NaN放在首位对数据帧进行排序

首先将缺失值放在数据NaN框中进行排序。na_position=”first”

df.sort_values("Salary",na_position='first')

首先将缺失值(NaN)排序df

返回类型是一个数据框。它不会修改原始数据框。

6.就地排序数据框

如果参数inplace设置为True(inplace=True),它将执行就地操作。修改原始数据框本身。返回类型为无。

df.sort_values("Salary",inplace=True)
df

就地排序

7.通过忽略索引对数据帧进行排序。

对数据框进行排序将保持相同的索引。如果要忽略索引,然后不得不提及ignore_index=True,则结果轴将标记为0、1,…,n-1。

df.sort_values("Salary",ignore_index=True)

通过忽略索引对数据帧进行排序。

8.使用键功能对数据框进行排序

在排序之前,将键函数应用于这些值。这类似于内置sorted()函数中的key参数,但值得注意的区别是此key函数应被向量化。它应该期望aSeries并返回与输入形状相同的Series。它将by独立应用于每个列。- Python文档

df.sort_values(by=["Skill"],key=lambda x:x.str.lower())

按键功能排序

键功能(str.lower())应用于“Skill” 列中的所有值,然后进行排序。如果包含相同的值,则基于行索引进行排序。

如果未在“Skill”列上调用键函数,则大写字母将首先排序。

df.sort_values(by=["Skill"])

按“技能”(Skill)列中的值对df进行排序,而没有按键功能

9.按字符串长度对数据框进行排序

按字符串长度对数据框进行排序。给出了键函数,它将计算给定列()中值的长度。根据列中值的长度,它将对数据框进行排序。
key=lambda x:x.str.len()“SKill”“Skill”

df.sort_values(by=["Skill"],key=lambda x:x.str.len())

根据“技能”列中的字符串长度对数据框进行排序

10.按行值对数据框进行排序

我们还可以按特定的行值对数据框进行排序。

创建一个包含数字的数据框。

df = pd.DataFrame(data={'x':[10,30,20], 'y':[1,2,3],'z':[5,15,10]})
df

数据框

我们可以根据特定行中的值对数据框进行排序。让我们进行排序row 0 默认情况下,它将按升序对行中的值进行排序。

要排序的行

df.sort_values(by=0,axis=1)

by=0 表示第0行。

axis=1 指示要排序的列。

根据row0值对数据框进行排序

如果要排序的行包含不同的数据类型,它将提高TypeError

df1 = pd.DataFrame(data={'x':[10,10,"d"], 'y':['a',5,'c'],'z':[5,15,'a']})
df1

数据框df1

如果我们按row0对数据帧进行排序,它将提高TypeErrorrow 0包含字符串和整数。

按第0行排序

df1.sort_values(by=0,axis=1)

Output:
TypeError: ‘<’ not supported between instances of ‘str’ and ‘int’

但是我们可以基于row1和row2对数据帧df1进行排序。int第1行str仅包含,第2行仅包含。

第1行和第2行

df1.sort_values(by=2,axis=1)

按row2排序数据框

 

Pandas.DataFrame.sort_index

DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)

按标签(沿轴)对对象排序。

如果inplace参数为False,则返回按标签排序的新DataFrame ,否则更新原始DataFrame并返回None

1.按行索引对数据框进行排序

创建一个数据框。

df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data2.csv") 
df

 

EmpID列设置为行索引。

df.set_index('EmpID',inplace=True)

EmpId→行索引

我们可以按行索引和列索引对数据进行排序。

行索引

df.sort_index()
or
df.sort_index(axis=0)

两者是相同的。axis=0表示按行索引排序。

按row_index排序

默认情况下,它将以升序排序。

2.按列索引对数据框进行排序

通过提及按列索引对数据框进行排序axis=1

列索引

df.sort_index(axis=1)

按column_index排序

默认情况下,它将按升序排序。

3.排序具有多索引的数据框

创建一个数据框并将两列设置为row_index。

df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data2.csv") 
df.set_index(["EmpID","Age"],inplace=True)

具有multi_index的数据框

现在,我们可以按row_index EmpID和Age对数据框进行排序。
如果level=0给出,它将基于row_index排序“EmpID”

df.sort_index(level=0)

仅根据row_index“ EmpID”排序

如果level=1表示将根据row_index对数据框进行排序“Age”

默认情况下,sort_remaining=True表示如果按级别和索引排序是多级的,则在按指定级别排序后也按其他级别(按顺序)排序。

在此示例中,它将按级别1(“Age”)进行排序,如果值的均值相同,则它将按另一个索引(“EmpID”)进行排序

df.sort_index(level=1)

按级别,多索引排序

4.仅将具有多索引的数据框按一级排序

通过提及一级和sort_remaining=False,我们只能将具有多索引的数据框排序为一级。

df.sort_index(level="Age",sort_remaining=False)

仅按一级排序,multi_index df

在此示例中,EmpID索引未排序。数据框仅基于“Age” 索引排序。

5.按索引降序对数据框排序

如果我们提到ascending=False,它将根据提到的索引以降序对数据帧进行排序。

df.sort_index(axis=0,ascending=False)

按desc顺序按行索引对数据帧进行排序

 

结论:

  • 如果对pandas数据框进行排序,则返回带有排序值的数据inplace=False框。否则,如果inplace=True返回None,它将修改原始数据框本身。
  • 默认情况下,所有排序仅按升序进行。如果我们提到的话,ascending=False它将以降序排列。