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

按索引和值对Pandas DataFrame进行排序
图片作者

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

按索引和值对Pandas DataFrame进行排序
图片作者
 

Pandas DataFrame按值排序

key = None
按索引和值对Pandas DataFrame进行排序
图片来源:作者

 DataFrame或无。

None,则为DataFrame。

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

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

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

 



按索引和值对Pandas DataFrame进行排序
数据框

EmpId)中的值对数据框进行排序

df.sort_values('EmpID')

 

按索引和值对Pandas DataFrame进行排序
按“ EmpID”中的值对数据框进行排序

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

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

ascending=False

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

df.sort_values(‘EmpID’,ascending=False)
按索引和值对Pandas DataFrame进行排序
按des顺序按“ EmpID”中的值对df进行排序

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

EmpID

df.sort_values(by=['Skill','EmpID'])
 
按索引和值对Pandas DataFrame进行排序
根据“技能”和“ EmpID”中的值对df进行排序

EmpID 升序排序。

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

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

EmpID一列以升序排列,另一列以降序排列。

df.sort_values(by=['Skill','EmpID'],ascending=[True,False])
按索引和值对Pandas DataFrame进行排序
按两个差异顺序按两列中的值对df进行排序

EmpID 降序排序。

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

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

na_position=”first”

df.sort_values("Salary",na_position='first')
按索引和值对Pandas DataFrame进行排序
首先将缺失值(NaN)排序df

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

6.就地排序数据框

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

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

按索引和值对Pandas DataFrame进行排序
就地排序

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

ignore_index=True
,则结果轴将标记为0、1,…,n-1。

df.sort_values("Salary",ignore_index=True)
按索引和值对Pandas DataFrame进行排序
通过忽略索引对数据帧进行排序。

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

Python文档

df.sort_values(by=["Skill"],key=lambda x:x.str.lower())
按索引和值对Pandas DataFrame进行排序
按键功能排序

“Skill” 列中的所有值,然后进行排序。如果包含相同的值,则基于行索引进行排序。

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

df.sort_values(by=["Skill"])
按索引和值对Pandas DataFrame进行排序
按“技能”(Skill)列中的值对df进行排序,而没有按键功能

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

“Skill”

df.sort_values(by=["Skill"],key=lambda x:x.str.len())
按索引和值对Pandas DataFrame进行排序
根据“技能”列中的字符串长度对数据框进行排序

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

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

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

df = pd.DataFrame(data={'x':[10,30,20], 'y':[1,2,3],'z':[5,15,10]})
df
按索引和值对Pandas DataFrame进行排序
数据框

row 0 默认情况下,它将按升序对行中的值进行排序。

按索引和值对Pandas DataFrame进行排序
要排序的行
df.sort_values(by=0,axis=1)

by=0 表示第0行。

axis=1 指示要排序的列。

按索引和值对Pandas DataFrame进行排序
根据row0值对数据框进行排序

TypeError

df1 = pd.DataFrame(data={'x':[10,10,"d"], 'y':['a',5,'c'],'z':[5,15,'a']})
df1
按索引和值对Pandas DataFrame进行排序
数据框df1

row 0包含字符串和整数。

按索引和值对Pandas DataFrame进行排序
按第0行排序
df1.sort_values(by=0,axis=1)

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

str包含,第2行包含

按索引和值对Pandas DataFrame进行排序
第1行和第2行
df1.sort_values(by=2,axis=1)
 
按索引和值对Pandas DataFrame进行排序
按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)

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

None

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

创建一个数据框。

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

 

按索引和值对Pandas DataFrame进行排序

EmpID设置为行索引。

df.set_index('EmpID',inplace=True)
按索引和值对Pandas DataFrame进行排序
EmpId→行索引

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

按索引和值对Pandas DataFrame进行排序
行索引
df.sort_index()
or
df.sort_index(axis=0)

axis=0表示按行索引排序。

按索引和值对Pandas DataFrame进行排序
按row_index排序

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

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

axis=1

按索引和值对Pandas DataFrame进行排序
列索引
df.sort_index(axis=1)
按索引和值对Pandas DataFrame进行排序
按column_index排序

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

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

df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data2.csv") 
df.set_index(["EmpID","Age"],inplace=True)
按索引和值对Pandas DataFrame进行排序
具有multi_index的数据框

“EmpID”

df.sort_index(level=0)

按索引和值对Pandas DataFrame进行排序

仅根据row_index“ EmpID”排序

“Age”

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

“EmpID”)进行排序

df.sort_index(level=1)
按索引和值对Pandas DataFrame进行排序
按级别,多索引排序

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

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

df.sort_index(level="Age",sort_remaining=False)
按索引和值对Pandas DataFrame进行排序
仅按一级排序,multi_index df

“Age” 索引排序

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

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

df.sort_index(axis=0,ascending=False)
按索引和值对Pandas DataFrame进行排序
按desc顺序按行索引对数据帧进行排序
 

结论:

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

相关文章: