当前位置: 代码网 > it编程>前端脚本>Python > pandas中DataFrame排序及分组排序的实现示例

pandas中DataFrame排序及分组排序的实现示例

2024年05月15日 Python 我要评论
1. sort_valuespandas中的sort_values()函数原理类似于sql中的order by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排

1. sort_values

pandas中的sort_values()函数原理类似于sql中的order by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。

官方文档

## 参数    
dataframe.sort_values(by, axis=0, ascending=true, inplace=false, kind='quicksort', na_position='last')  
#### 参数说明    
axis:{0 or ‘index', 1 or ‘columns'}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序    
by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名";  
ascending:布尔型,true则升序,可以是[true,false],即第一字段升序,第二个降序  
inplace:布尔型,是否用排序后的数据框替换现有的数据框  
kind:排序方法,{‘quicksort', ‘mergesort', ‘heapsort'}, default ‘quicksort'。似乎不用太关心  
na_position : {‘first', ‘last'}, default ‘last',默认缺失值排在最后面  

2. 排序sort_values

构建dataframe

import pandas as pd

df = pd.dataframe([['a', 100, 'c'], ['a', 300, 'a'], ['a', 200, 'b'],
                   ['c', 300, 'a'], ['c', 200, 'b'], ['c', 100, 'c'],
                   ['b', 200, 'b'], ['b', 300, 'a'], ['b', 100, 'c']], columns=['x', 'y', 'z'])

   x    y  z
0  a  100  c
1  a  300  a
2  a  200  b
3  c  300  a
4  c  200  b
5  c  100  c
6  b  200  b
7  b  300  a
8  b  100  c

按照y, x两列对df进行降序排列

df.sort_values(by=['y', 'x'], ascending=false, inplace=true)
print(df)

   x    y  z
3  c  300  a
7  b  300  a
1  a  300  a
4  c  200  b
6  b  200  b
2  a  200  b
5  c  100  c
8  b  100  c
0  a  100  c

3. 分组排序groupby|sort_values

按照x列进行分组后对y列进行升序排序

res = df.groupby('x', sort=false).apply(lambda x: x.sort_values('y', ascending=true)).reset_index(drop=true)
print(res)

   x    y  z
0  a  100  c
1  a  200  b
2  a  300  a
3  c  100  c
4  c  200  b
5  c  300  a
6  b  100  c
7  b  200  b
8  b  300  a

示例:

创建数据框

#利用字典dict创建数据框
import numpy as np
import pandas as pd
df=pd.dataframe({'col1':['a','a','b',np.nan,'d','c'],
                 'col2':[2,1,9,8,7,7],
                 'col3':[0,1,9,4,2,8]
})
print(df)

>>>
  col1  col2  col3
0    a     2     0
1    a     1     1
2    b     9     9
3  nan     8     4
4    d     7     2
5    c     7     8

依据第一列排序,并将该列空值放在首位

#依据第一列排序,并将该列空值放在首位
print(df.sort_values(by=['col1'],na_position='first'))
>>>
  col1  col2  col3
3  nan     8     4
0    a     2     0
1    a     1     1
2    b     9     9
5    c     7     8
4    d     7     2

依据第二、三列,数值降序排序

#依据第二、三列,数值降序排序
print(df.sort_values(by=['col2','col3'],ascending=false))
>>>
  col1  col2  col3
2    b     9     9
3  nan     8     4
5    c     7     8
4    d     7     2
0    a     2     0
1    a     1     1

根据第一列中数值排序,按降序排列,并替换原数据

#根据第一列中数值排序,按降序排列,并替换原数据
df.sort_values(by=['col1'],ascending=false,inplace=true,
                     na_position='first')
print(df)
>>>
  col1  col2  col3
3  nan     8     4
4    d     7     2
5    c     7     8
2    b     9     9
1    a     1     1
0    a     2     0

按照索引值为0的行,即第一行的值来降序排序

x = pd.dataframe({'x1':[1,2,2,3],'x2':[4,3,2,1],'x3':[3,2,4,1]}) 
print(x)
#按照索引值为0的行,即第一行的值来降序排序
print(x.sort_values(by =0,ascending=false,axis=1))
>>>
   x1  x2  x3
0   1   4   3
1   2   3   2
2   2   2   4
3   3   1   1
   x2  x3  x1
0   4   3   1
1   3   2   2
2   2   4   2
3   1   1   3

到此这篇关于pandas中dataframe排序及分组排序的文章就介绍到这了,更多相关pandas 排序及分组排序内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com