排序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')

默認情況下,它將以升序排序。該索引也將保持不變。
返回類型是一個數據框。它不會修改原始數據框。
2.按一列按降序對數據框進行排序
按列EmpID降序對數據框進行排序。不得不提ascending=False
。
返回類型是一個數據框。它不會修改原始數據框。
df.sort_values(‘EmpID’,ascending=False)

3.按兩列對數據框進行排序
按列Skill
和排序數據框EmpID
。如果列Skill
中的值相同,則它將基於第二列中的值進行排序EmpID
df.sort_values(by=['Skill','EmpID'])

首先,它將基於“Skill”
列中的值進行排序。由於JavaScript
列中的值Skill
相同,因此它將再次按值EmpID
升序排序。
返回類型是一個數據框。它不會修改原始數據框。
4.按兩列以不同順序對數據框進行排序
按列Skill
和排序數據框EmpID
。一列以升序排列,另一列以降序排列。
df.sort_values(by=['Skill','EmpID'],ascending=[True,False])

首先,數據幀將基於“Skill”
列中的值以升序排序。由於JavaScript
列中的值Skill
相同,因此它將按值EmpID
降序排序。
返回類型是一個數據框。它不會修改原始數據框。
5.通過將NaN放在首位對數據幀進行排序
首先將缺失值放在數據NaN
框中進行排序。na_position=”first”
df.sort_values("Salary",na_position='first')

返回類型是一個數據框。它不會修改原始數據框。
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"])

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
指示要排序的列。

如果要排序的行包含不同的數據類型,它將提高TypeError
。
df1 = pd.DataFrame(data={'x':[10,10,"d"], 'y':['a',5,'c'],'z':[5,15,'a']}) df1

如果我們按row0對數據幀進行排序,它將提高TypeError
。row 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行僅包含。

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

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)

我們可以按行索引和列索引對數據進行排序。

df.sort_index() or df.sort_index(axis=0)
兩者是相同的。axis=0
表示按行索引排序。

默認情況下,它將以升序排序。
2.按列索引對數據框進行排序
通過提及按列索引對數據框進行排序axis=1
。

df.sort_index(axis=1)

默認情況下,它將按升序排序。
3.排序具有多索引的數據框
創建一個數據框並將兩列設置為row_index。
df=pd.read_csv("C:\pandas_experiment\pandas_sorting\data2.csv") df.set_index(["EmpID","Age"],inplace=True)

現在,我們可以按row_index EmpID和Age對數據框進行排序。
如果level=0
給出,它將基於row_index排序“EmpID”
df.sort_index(level=0)
如果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)

在此示例中,EmpID
索引未排序。數據框僅基於“Age”
索引排序。
5.按索引降序對數據框排序
如果我們提到ascending=False
,它將根據提到的索引以降序對數據幀進行排序。
df.sort_index(axis=0,ascending=False)

結論:
- 如果對pandas數據框進行排序,則返回帶有排序值的數據
inplace=False
框。否則,如果inplace=True
返回None
,它將修改原始數據框本身。 - 默認情況下,所有排序僅按升序進行。如果我們提到的話,
ascending=False
它將以降序排列。