EXCEL的数值排序功能还是挺强大的,升序、降序,尤其自定义排序,能够对多个字段进行排序工作。
那么,在Python大法中,有没有这样强大的排序功能呢?答案是有的,而且本人觉得Python的排序功能,一点不比EXCEL的差。
同样,我们依然用到的是强大的pandas这个三方库。我们先将numpy和pandas导入进来:
![Python实现EXCEL表格的排序功能 Python实现EXCEL表格的排序功能](https://image.shishitao.com:8440/aHR0cHM6Ly9zczAuYmFpZHUuY29tLzZPTldzamlwMFFJWjh0eWhucS9pdC91PTExNjkzNTU3NDQsNDE1MTQxODk4MSZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTI4NCZoPTY2JnM9ODVGMjZDMzJDNTc0RUMyMTVFRDE0OTQ3MDEwMEUwQjI%3D.jpg?w=700&webp=1)
接着构造一个今天要用到的DataFrame,我们用字典的形式来构造。
![Python实现EXCEL表格的排序功能 Python实现EXCEL表格的排序功能](https://image.shishitao.com:8440/aHR0cHM6Ly9zczAuYmFpZHUuY29tLzZPTldzamlwMFFJWjh0eWhucS9pdC91PTE3Nzc5MTQ5MzAsMTAzNTczNzU2OSZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTUyOCZoPTM4NCZzPTgxMzA3OTMyMTk5RkMxQ0E1ODU1NjBEQTAwMDBDMEIx.jpg?w=700&webp=1)
都是随意构造的,内容别较真。我们先来个简单点的热热身,按照身高的降序来排列一下。
![Python实现EXCEL表格的排序功能 Python实现EXCEL表格的排序功能](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTM1NTgzNzM5ODQsNDU3MDA2NDI3JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NDAzJmg9MjU5JnM9MDAzMDY1MzI1OTFENDBDQTFFRERBMURFMDAwMDUwQjM%3D.jpg?w=700&webp=1)
我们用到的是df.sort_values()这个函数。第一个参数为by,传入你要排序的列的标签名即可,后面的ascending参数指示排序方法为升序还是降序,True为升序,False为降序。由于存在相同的身高,pandas会自动的比较两个相同身高所对应的index,按照index的升序来排列。
假如我有这样一个需求:先按照身高降序排序,若存在相同的身高,则再按照武力来降序排序,可以做到吗?
当然可以,我们只需要在by参数里传入列标签组成的列表即可。
![Python实现EXCEL表格的排序功能 Python实现EXCEL表格的排序功能](https://image.shishitao.com:8440/aHR0cHM6Ly9zczIuYmFpZHUuY29tLzZPTllzamlwMFFJWjh0eWhucS9pdC91PTIxMjEzNDAwNDksMTc0OTU2MTk1NyZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTQ0NCZoPTI2MyZzPTAwMzI2NTMyNUQxODQ1Q0E0QzdEODFERTAwMDBDMEIx.jpg?w=700&webp=1)
通过这个例子我们可以看到,by参数不但可以传入字符串,还可以传入字符串组成的列表,来实现对多个列进行排序。
接着,我的要求再高一点。身高我依然需要降序,但是武力我需要升序,可以吗?
我们直接上结果:
![Python实现EXCEL表格的排序功能 Python实现EXCEL表格的排序功能](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTIxODg1NDgwNzYsNTk5MzkyNDI3JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NDk1Jmg9MjY1JnM9ODBCMDc1MzI1RDBBNEQ0MzA4N0RDMURBMDAwMEMwQjM%3D.jpg?w=700&webp=1)
跟by参数类似,我们只需要在ascending参数中也传入布尔值组成的列表就可以了,意思就是告诉pandas,这两列我各自需要的排序方式,就跟后面ascending参数里指定的一样。因此,这两个参数的列表内的元素个数需要是一致的,否则就会报错了,因为没法一一对应。
关于sort_values这个强大的排序函数就介绍到这了。除了这些参数之外,它还有inplace、kind和na_position等参数来应对不同的排序需求。可以参考官网文档进行学习