DataFrame(12):DataFrame的排序與排名問題


1、說明

DataFrame中的排序分為兩種,一種是對索引排序,一種是對值進行排序。

索引排序:sort_index();

值排序:sort_values();

值排名:rank()

對於索引排序,涉及到對行索引、列索引的排序,並且還涉及到是升序還是降序。函數df.sort_index(axis= , ascending= , inplace=),需要特別注意這三個參數。axis表示對行操作,還是對列操作;ascending表示升序,還是降序操作。

對於值排序,同樣也是涉及到行、列排序問題,升序、降序排列問題。函數df.sort_values(by= , axis= , ascending= , inplace=),也需要特別注意這幾個參數,只是多了一個by操作,需要我們指明是按照哪一行或哪一列,進行排序的。

注意:axis=0表示對行操作,axis=1表示對列進行操作;ascending=True表示升序,ascending=False表示降序;inplace=True表示對原始DataFrame本身操作,因此不需要賦值操作,inplace=False相當於是對原始DataFrame的拷貝,之后的一些操作都是針對這個拷貝文件進行操作的,因此需要我們賦值給一個變量,保存操作后的結果。

2、索引排序:df.sort_index()

① 對行索引,進行升序排列

df = pd.DataFrame({"A":[1,3,5,7,9],
                   "D":[1,2,3,4,5],
                   "C":[3,6,9,12,15],
                   "B":[2,4,6,8,10]},
                   index=list("acbed"))
display(df)
display(id(df))

df.sort_index(axis=0,ascending=True,inplace=True)
display(df)
display(id(df))

df1 = df.sort_index(axis=0,ascending=True)
display(df1)
display(id(df1))

結果如下:

            

② 對列索引,進行降序排列

df = pd.DataFrame({"A":[1,3,5,7,9],
                   "D":[1,2,3,4,5],
                   "C":[3,6,9,12,15],
                   "B":[2,4,6,8,10]},
                   index=list("acbed"))
display(df)

df.sort_index(axis=1,ascending=False,inplace=True)
display(df)

結果如下:

            

 

3、值排序:df.sort_values()

① 對某一列進行升序排列(有實際意義)

df = pd.DataFrame({"A":[3,1,5,9,7],
                   "D":[4,1,2,5,3],
                   "C":[3,15,9,6,12],
                   "B":[2,4,6,10,8]},
                   index=list("acbed"))
display(df)

df.sort_values(by="A",axis=0,ascending=True,inplace=True)
display(df)

結果如下:

            

② 對某一行進行降序排列(實際意義不大)

df = pd.DataFrame({"A":[3,1,5,9,7],
                   "D":[4,1,2,5,3],
                   "C":[3,15,9,6,12],
                   "B":[2,4,6,10,8]},
                   index=list("acbed"))
display(df)

df.sort_values(by="A",axis=1,ascending=False,inplace=True)
display(df)

結果如下:

            

③ 對多列進行聯合排序(重要)

df = pd.DataFrame({"A":[3,1,3,9,7],
                   "D":[666,1,888,5,3],
                   "C":[3,15,9,6,12],
                   "B":[2,4,6,10,8]},
                   index=list("acbed"))
display(df)

df.sort_values(by=["A","D"],axis=0,ascending=[True,False],inplace=True)
df

結果如下:

            

注意:上圖中,我們分別按照A和D這個列進行排序,先按照A列做升序排列,當A列中具有相同值的時候,就按照D列做降序排列。

4、sort_values()中的na_position參數

na_position參數用於設定缺失值的顯示位置,first表示缺失值顯示在最前面;last表示缺失值顯示在最后面。

df = pd.DataFrame({"A":[10,8,np.nan,2,4],
                   "D":[1,7,5,3,8],
                   "B":[5,2,8,4,1]},
                   index=list("abcde"))
display(df)

df.sort_values(by="A",axis=0,inplace=True,na_position="first")
display(df)

df.sort_values(by="A",axis=0,inplace=True,na_position="last")
display(df)

結果如下:

            

5、“值排名”:rank()函數

1)rank()函數的常用參數說明

2)原始數據

x = {"name":["張三","李四","王五","趙六","鄭七","陳八","黃九","孫十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

結果如下:

            

3)rank()函數使用如下

① method="first"

x = {"name":["張三","李四","王五","趙六","鄭七","陳八","黃九","孫十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="first")
display(df)

結果如下:

            

② method="min"

x = {"name":["張三","李四","王五","趙六","鄭七","陳八","黃九","孫十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="min")
display(df)

結果如下:

            

③ method="max"

x = {"name":["張三","李四","王五","趙六","鄭七","陳八","黃九","孫十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="max")
display(df)

結果如下:

            

④ method="average"

x = {"name":["張三","李四","王五","趙六","鄭七","陳八","黃九","孫十"],
     "sales":[60,40,50,40,30,80,70,60]}
df = pd.DataFrame(x)
display(df)

df["排名"] = df["sales"].rank(method="average")
display(df)

結果如下:

         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM