DataFrame有两种排序方法,分别是sort_index 和 sort_values, 他们分别可以按标签排序和按值排序,其中sort_values方法比较常用。
sort_index方法提供了按标签排序的功能,默认是进行行排序,也可以通过设置axis参数为1,进行列排序
import pandas as pd
data1 = [
{'语文': 90, '数学': 92, '姓名': '小明'},
{'语文': 98, '数学': 87, '姓名': '小刚'},
{'语文': 87, '数学': 90, '姓名': '小丽'},
{'语文': 90, '数学': 98, '姓名': '小王'},
]
df = pd.DataFrame(data1, index=[1, 3, 2, 4])
df.index.name = '学号'
df.columns.name = '科目'
print(df)
print("*"*20)
sorted_df = df.sort_index()
print(sorted_df)
程序输出结果
科目 姓名 数学 语文
学号
1 小明 92 90
3 小刚 87 98
2 小丽 90 87
4 小王 98 90
********************
科目 姓名 数学 语文
学号
1 小明 92 90
2 小丽 90 87
3 小刚 87 98
4 小王 98 90
如果想根据学号降序排序,则需要设置参数ascending为False
sorted_df = df.sort_index(ascending=False)
print(sorted_df)
import pandas as pd
data1 = [
{'2020-01-03': 7, '2020-01-02': 8, '2020-01-01': 4},
{'2020-01-03': -4, '2020-01-02': -2, '2020-01-01':-9},
]
df = pd.DataFrame(data1, index=['最高温', '最低温'], columns=['2020-01-03', '2020-01-02', '2020-01-01'])
print(df)
print('*'*20)
sorted_df = df.sort_index(axis=1) # 根据日期进行列排序
print(sorted_df)
为了演示效果,我故意设计了一个DataFrame,列名使用日期,且是无序的,其内容为
2020-01-03 2020-01-02 2020-01-01
最高温 7 8 4
最低温 -4 -2 -9
我希望能够按照日期从小到大排序来展示数据,调用sort_index时设置axis参数为1,排序后的DataFrame是
2020-01-01 2020-01-02 2020-01-03
最高温 4 8 7
最低温 -9 -2 -4
sort_values提供按值排序的算法,设置参数by来决定用哪一列的值进行排序
import pandas as pd
data1 = [
{'语文': 90, '数学': 98, '姓名': '小明'},
{'语文': 98, '数学': 87, '姓名': '小刚'},
{'语文': 87, '数学': 90, '姓名': '小丽'},
{'语文': 90, '数学': 92, '姓名': '小王'},
]
df = pd.DataFrame(data1, index=[1, 3, 2, 4])
df.index.name = '学号'
df.columns.name = '科目'
print(df)
print("*"*20)
sorted_df = df.sort_values(by='语文')
print(sorted_df)
在示例中,使用语文成绩进行排序,程序输出结果为
科目 姓名 数学 语文
学号
1 小明 98 90
3 小刚 87 98
2 小丽 90 87
4 小王 92 90
********************
科目 姓名 数学 语文
学号
2 小丽 90 87
1 小明 98 90
4 小王 92 90
3 小刚 87 98
语文成绩从小到大,当语文成绩相同时,我希望能够按照数学成绩进行排序,这要要求就需要设置多个排序的列名
sorted_df = df.sort_values(by=['语文', '数学'])
print(sorted_df)
排序后的sorted_df内容是
科目 姓名 数学 语文
学号
2 小丽 90 87
4 小王 92 90
1 小明 98 90
3 小刚 87 98
sort_values同样支持设置axis参数
import pandas as pd
data1 = [
{'2020-01-03': 7, '2020-01-02': 8, '2020-01-01': 4},
{'2020-01-03': -4, '2020-01-02': -2, '2020-01-01':-9},
]
df = pd.DataFrame(data1, index=['最高温', '最低温'], columns=['2020-01-03', '2020-01-02', '2020-01-01'])
print(df)
sorted_df = df.sort_values(axis=1, by='最高温')
print(sorted_df)
在这个示例中,我希望能够根据最高温度进行列排序,排序后的结果是
2020-01-01 2020-01-03 2020-01-02
最高温 4 7 8
最低温 -9 -4 -2
进行排序时,你可以指定排序算法,默认使用快速排序,下面的示例使用归并排序
sorted_df = df.sort_values(axis=1, by='最高温', kind='mergesort')
print(sorted_df)
QQ交流群: 211426309