宜昌市住房和城乡建设官方网站,超溜网站建设,wordpress 微信分享h5,wordpress培训机构在处理表格型数据时#xff0c;常会用到排序#xff0c;比如#xff0c;按某一行或列的值对表格排序#xff0c;要怎么做呢#xff1f;
这就要用到 pandas 中的 sort_values() 函数。
一、 按列的值对数据排序
先来看最常见的情况。
1.按某一列的值对数据排序
以下面…在处理表格型数据时常会用到排序比如按某一行或列的值对表格排序要怎么做呢
这就要用到 pandas 中的 sort_values() 函数。
一、 按列的值对数据排序
先来看最常见的情况。
1.按某一列的值对数据排序
以下面的数据为例。
import pandas as pddf_col pd.DataFrame({Name:[Paul,Richard, Betty, Philip,Anna],course1:[85,83,90,84,85],course2:[90,82,79,71,86],sport:[basketball, Volleyball, football, Basketball,baseball]},index[1,2,3,4,5])df_colNamecourse1course2sport1Paul8590basketball2Richard8382Volleyball3Betty9079football4Philip8471Basketball5Anna8586baseball
在 sort_values() 函数中设置 by列名即可以按这一列值的顺序重新排列行。
df_sortdf_col.sort_values(bycourse2)
df_sortNamecourse1course2sport4Philip8471Basketball3Betty9079football2Richard8382Volleyball5Anna8586baseball1Paul8590basketball
如以上结果所示默认是升序排列。还可以做降序排列在 sort_values() 函数中设置 ascendingFalse 即可。例如
df_sortdf_col.sort_values(bycourse2,ascendingFalse)
df_sortNamecourse1course2sport1Paul8590basketball5Anna8586baseball2Richard8382Volleyball3Betty9079football4Philip8471Basketball
2. 按多列的值对数据排序
您是否遇到过这种情况要排序的某一列数据有相同的值此时结果会怎么样呢我们来看下面的例子。
df_sortdf_col.sort_values(bycourse1)
df_sortNamecourse1course2sport2Richard8382Volleyball4Philip8471Basketball1Paul8590basketball5Anna8586baseball3Betty9079football
从结果看到“course1” 有两个相同的值 85此时会依据 index 的先后顺序排列。
那如果不想按 index 顺序想要自己设定相同值的排序方式应该怎么做呢
可以设置第二列对于第一列的相同值参照第二列的值排序。例如
df_sortdf_col.sort_values(by[course1,course2])
df_sortNamecourse1course2sport2Richard8382Volleyball4Philip8471Basketball5Anna8586baseball1Paul8590basketball3Betty9079football
可以看到by 参数中的第二列 “course2” 只在第一列 “course1” 中有相同值时起作用因此只有 “Anna” 和 “Paul” 所在的这两行数据位置互换其它行位置不变。
3. key 参数设置排序时的数据变换函数
在实际中还可能会遇到这种情况数据中大小写都有比如例子数据的 “sport” 列。按这一列对数据排序结果如下
df_sortdf_col.sort_values(by[sport])
df_sortNamecourse1course2sport4Philip8471Basketball2Richard8382Volleyball5Anna8586baseball1Paul8590basketball3Betty9079football
看结果发现大写字母排在小写字母前面因此 “Volleyball” 所在行排在 “baseball” 所在行前面但这并不是我们想要的排序结果。那应该怎么做才能按字母顺序排序呢
可以设置 sort_values() 函数的 key 参数。
df_sortdf_col.sort_values(by[sport],keylambda col:col.str.lower())
df_sortNamecourse1course2sport5Anna8586baseball1Paul8590basketball4Philip8471Basketball3Betty9079football2Richard8382Volleyball
此时的排序结果就是按字母顺序排列。
4. 修改原数据
前面介绍的操作中每次都生成了一个新的数据 df_sort并没有改变原数据。
df_colNamecourse1course2sport1Paul8590basketball2Richard8382Volleyball3Betty9079football4Philip8471Basketball5Anna8586baseball
但是有时可能数据太大而原数据后续不再使用。为了节省空间想直接在原数据上改动。应该怎么办呢
只要在 sort_values() 函数中设置 inplaceTrue。
df_col.sort_values(bycourse2,inplaceTrue)
df_colNamecourse1course2sport4Philip8471Basketball3Betty9079football2Richard8382Volleyball5Anna8586baseball1Paul8590basketball
二、 按行的值对数据排序
需要注意的是这种情况只适用于各列数据类型相同的情况例如下面例子中的数据每一列数据都是数值型。而前面例子的数据既有数值型又有字符型无法按行的值排序。
df_row pd.DataFrame({course1:[91,85,90,84,92],course2:[72,81,76,71,79],course3:[93,85,88,94,86]},index[Paul,Richard, Betty, Philip,Anna])
df_rowcourse1course2course3Paul917293Richard858185Betty907688Philip847194Anna927986
按行的值排序时设置 by 参数为某行的 index 名并且 axis1。
df_sortdf_row.sort_values(byAnna,axis1)
df_sortcourse2course3course1Paul729391Richard818585Betty768890Philip719484Anna798692
按行值排序在 sort_values() 函数中设置 ascending, key, inplace 等参数的方式都与前面介绍的按列值排序相同。这里仅以按多行的值对数据排序为例。
df_sortdf_row.sort_values(by[Richard,Paul],axis1,ascendingFalse)
df_sortcourse3course1course2Paul939172Richard858581Betty889076Philip948471Anna869279
参考
1.https://www.geeksforgeeks.org/sort-rows-or-columns-in-pandas-dataframe-based-on-values/#courses
2.https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html
本文对您有帮助的话请点赞支持一下吧谢谢
关注我 宁萌Julie互相学习多多交流呀