设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 103|回复: 15

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

[复制链接]

4

主题

55

回帖

160

积分

注册会员

积分
160
发表于 2024-4-19 20:17:05 | 显示全部楼层 |阅读模式
目录


1. sort_values

pandas中的sort_values()函数原理类似于SQL中的order by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。
官方文档
  1. ## 参数   
  2. DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')  
  3. #### 参数说明   
  4. axis:{0 or ‘index', 1 or ‘columns'}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序   
  5. by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名";  
  6. ascending:布尔型,True则升序,可以是[True,False],即第一字段升序,第二个降序  
  7. inplace:布尔型,是否用排序后的数据框替换现有的数据框  
  8. kind:排序方法,{‘quicksort', ‘mergesort', ‘heapsort'}, default ‘quicksort'。似乎不用太关心  
  9. na_position : {‘first', ‘last'}, default ‘last',默认缺失值排在最后面  
复制代码
2. 排序sort_values

构建DataFrame
  1. import pandas as pd

  2. df = pd.DataFrame([['a', 100, 'c'], ['a', 300, 'a'], ['a', 200, 'b'],
  3.                    ['c', 300, 'a'], ['c', 200, 'b'], ['c', 100, 'c'],
  4.                    ['b', 200, 'b'], ['b', 300, 'a'], ['b', 100, 'c']], columns=['X', 'Y', 'Z'])
复制代码
  1.    X    Y  Z0  a  100  c1  a  300  a2  a  200  b3  c  300  a4  c  200  b5  c  100  c6  b  200  b7  b  300  a8  b  100  c
复制代码
按照Y, X两列对df进行降序排列
  1. df.sort_values(by=['Y', 'X'], ascending=False, inplace=True)
  2. print(df)
复制代码
  1.    X    Y  Z3  c  300  a7  b  300  a1  a  300  a4  c  200  b6  b  200  b2  a  200  b5  c  100  c8  b  100  c0  a  100  c
复制代码
3. 分组排序groupby|sort_values

按照X列进行分组后对Y列进行升序排序
  1. res = df.groupby('X', sort=False).apply(lambda x: x.sort_values('Y', ascending=True)).reset_index(drop=True)
  2. print(res)
复制代码
  1.    X    Y  Z0  a  100  c1  a  200  b2  a  300  a3  c  100  c4  c  200  b5  c  300  a6  b  100  c7  b  200  b8  b  300  a
复制代码
示例:

创建数据框
  1. #利用字典dict创建数据框
  2. import numpy as np
  3. import pandas as pd
  4. df=pd.DataFrame({'col1':['A','A','B',np.nan,'D','C'],
  5.                  'col2':[2,1,9,8,7,7],
  6.                  'col3':[0,1,9,4,2,8]
  7. })
  8. print(df)

  9. >>>
  10.   col1  col2  col3
  11. 0    A     2     0
  12. 1    A     1     1
  13. 2    B     9     9
  14. 3  NaN     8     4
  15. 4    D     7     2
  16. 5    C     7     8
复制代码
依据第一列排序,并将该列空值放在首位
  1. #依据第一列排序,并将该列空值放在首位
  2. print(df.sort_values(by=['col1'],na_position='first'))
  3. >>>
  4.   col1  col2  col3
  5. 3  NaN     8     4
  6. 0    A     2     0
  7. 1    A     1     1
  8. 2    B     9     9
  9. 5    C     7     8
  10. 4    D     7     2
复制代码
依据第二、三列,数值降序排序
  1. #依据第二、三列,数值降序排序
  2. print(df.sort_values(by=['col2','col3'],ascending=False))
  3. >>>
  4.   col1  col2  col3
  5. 2    B     9     9
  6. 3  NaN     8     4
  7. 5    C     7     8
  8. 4    D     7     2
  9. 0    A     2     0
  10. 1    A     1     1
复制代码
根据第一列中数值排序,按降序排列,并替换原数据
  1. #根据第一列中数值排序,按降序排列,并替换原数据
  2. df.sort_values(by=['col1'],ascending=False,inplace=True,
  3.                      na_position='first')
  4. print(df)
  5. >>>
  6.   col1  col2  col3
  7. 3  NaN     8     4
  8. 4    D     7     2
  9. 5    C     7     8
  10. 2    B     9     9
  11. 1    A     1     1
  12. 0    A     2     0
复制代码
按照索引值为0的行,即第一行的值来降序排序
  1. x = pd.DataFrame({'x1':[1,2,2,3],'x2':[4,3,2,1],'x3':[3,2,4,1]})
  2. print(x)
  3. #按照索引值为0的行,即第一行的值来降序排序
  4. print(x.sort_values(by =0,ascending=False,axis=1))
  5. >>>
  6.    x1  x2  x3
  7. 0   1   4   3
  8. 1   2   3   2
  9. 2   2   2   4
  10. 3   3   1   1
  11.    x2  x3  x1
  12. 0   4   3   1
  13. 1   3   2   2
  14. 2   2   4   2
  15. 3   1   1   3
复制代码
到此这篇关于pandas中DataFrame排序及分组排序的文章就介绍到这了,更多相关pandas 排序及分组排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

1

主题

49

回帖

121

积分

注册会员

积分
121
发表于 2024-5-15 09:11:36 | 显示全部楼层
让我们一起努力

1

主题

38

回帖

97

积分

注册会员

积分
97
发表于 2024-6-2 23:13:13 | 显示全部楼层
谢谢你的提醒,我会注意的。

0

主题

48

回帖

94

积分

注册会员

积分
94
发表于 2024-6-18 22:53:32 | 显示全部楼层
我们一起努力,共同解决问题吧。

0

主题

41

回帖

83

积分

注册会员

积分
83
发表于 2024-6-24 19:44:00 | 显示全部楼层
我完全同意你的观点

0

主题

56

回帖

111

积分

注册会员

积分
111
发表于 2024-6-27 10:57:33 | 显示全部楼层
确实牛逼

1

主题

54

回帖

132

积分

注册会员

积分
132
发表于 2024-6-29 11:33:15 | 显示全部楼层
我想了解更多

0

主题

45

回帖

91

积分

注册会员

积分
91
发表于 2024-7-13 17:27:38 | 显示全部楼层
说得太好了,完全同意!

1

主题

34

回帖

92

积分

注册会员

积分
92
发表于 2024-7-28 13:09:08 | 显示全部楼层
同意你的观点,我们有共鸣。

3

主题

64

回帖

196

积分

注册会员

积分
196
发表于 2024-8-11 03:04:31 | 显示全部楼层
看了LZ的帖子,我只想说一句很好很强大!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-24 11:14 , Processed in 0.110000 second(s), 26 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表