python dataframe排序_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))

结果如下:

ee5a273d9c42de0dad7109c9a7444f76f44.png

② 对列索引,进行降序排列

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)

结果如下:

da9d4da0b4f540cad7d3424dc2b437dee2a.png

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)

结果如下:

ff75f69e8576eff55ea3be732e670376037.png

② 对某一行进行降序排列(实际意义不大)

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)

结果如下:

4eb2f8d3a56121e76ce89ce7c91cdf48241.png

③ 对多列进行联合排序(重要)

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

结果如下:

cffbeac55c30d2c10e4d5a0d05bea575031.png

注意:上图中,我们分别按照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)

结果如下:

1d56cffb2652043655534de090231989e9e.png

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

1)rank()函数的常用参数说明

9dbd08434c88b0b576fe91cd24e6479f276.png

2)原始数据

x = {"name":["张三","李四","王五","赵六","郑七","陈八","黄九","孙十"],"sales":[60,40,50,40,30,80,70,60]}

df=pd.DataFrame(x)

display(df)

结果如下:

33041ac5ce4498a2b9db4006297634fa873.png

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)

结果如下:

be63d9235ff71005f26429ff993e4005270.png

② 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)

结果如下:

137be74630ba63b156db746b21d070c0303.png

③ 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)

结果如下:

16e6e39511c270172d4042151e4713a33f6.png

④ 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)

结果如下:

813811583c02519beb5087c7b4af137f7ac.png

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值