欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

玩转pandas(五):轻松搞定数据排序

最编程 2024-01-15 13:29:40
...


一、数据排序

  • Series的排序: Series.sort_values(ascending=True, inplace=False) ascending:默认为True升序排序,为False降序排序
    inplace:是否修改原始Series
  • DataFrame的排序:DataFrame.sort values(by, ascending=True, inplace=False) by:字符串或者List<字符串>,单列排序或者多列排序
    ascending:bool或者List,升序还是降序,如果是list对应by的多列
    inplace:是否修改原始DataFrame
import pandas as pd
fpath = '/Users/python/Desktop/means/ml-25m/beijing_tianqi_2018.csv'
df = pd.read_csv(fpath)
df.loc[:, 'bWendu'] = df['bWendu'].str.replace('℃', '').astype('int32')
df.loc[:, 'yWendu'] = df['yWendu'].str.replace('℃', '').astype('int32')

	ymd	bWendu	yWendu	tianqi	fengxiang	fengli	aqi	aqiInfo	aqiLevel
0	2018-01-01	3	-6	晴~多云	东北风	1-2级	59	良	2
1	2018-01-02	2	-5	阴~多云	东北风	1-2级	49	优	1
2	2018-01-03	2	-5	多云		北风		1-2级	28	优	1
3	2018-01-04	0	-8	阴		东北风	1-2级	28	优	1
4	2018-01-05	3	-6	多云~晴	西北风	1-2级	50	优	1

二、Series 的排序

df['aqi'].sort_values()                以空气质量指数正序排列 (默认升序)
df['aqi'].sort_values(ascending=False) 以空气质量指数倒序排列
df['tianqi'].sort_values()             以天气情况正序排列

	ymd	bWendu	yWendu	tianqi	fengxiang	fengli	aqi	aqiInfo	aqiLevel
0	2018-01-01	3	-6	晴~多云	东北风	1-2级	59	良	2
1	2018-01-02	2	-5	阴~多云	东北风	1-2级	49	优	1
2	2018-01-03	2	-5	多云		北风		1-2级	28	优	1
3	2018-01-04	0	-8	阴		东北风	1-2级	28	优	1
4	2018-01-05	3	-6	多云~晴	西北风	1-2级	50	优	1

三、DataFrame 的排序

  • 单列排序
df.sort_values(by='aqi')                    以空气质量指数正序排列 (默认升序)
df.sort_values(by='aqi', ascending=False)   以空气质量指数倒序排列
	
	ymd	bWendu	yWendu	tianqi	fengxiang	fengli	aqi	aqiInfo	aqiLevel
271	2018-09-29	22	11	晴		北风		3-4级	21	优		1
281	2018-10-09	15	4	多云~晴	西北风	4-5级	21	优		1
...	...	...	...	...	...	...	...	...	...
72	2018-03-14	15	6	多云~阴	东北风	1-2级	293	重度污染	5
86	2018-03-28	25	9	多云~晴	东风		1-2级	387	严重污染	6
365 rows × 9 columns
  • 多列排序
按空气质量等级、最高温度排序,默认升序
df.sort_values(by=['aqiLevel', 'bWendu']) 

按空气质量等级、最高温度倒序排列
df.sort_values(by=['aqiLevel', 'bWendu'], ascending=False)

按空气质量等级正序排列、最高温度倒序排列
df.sort_values(by=['aqiLevel', 'bWendu'], ascending=[True, False])

ymd	bWendu	yWendu	tianqi	fengxiang	fengli	aqi	aqiInfo	aqiLevel
360	2018-12-27	-5	-12	多云~晴	西北风	3级		48	优		1
22	2018-01-23	-4	-12	晴		西北风	3-4级	31	优		1
...	...	...	...	...	...	...	...	...	...
85	2018-03-27	27	11	晴		南风		1-2级	243	重度污染	5
86	2018-03-28	25	9	多云~晴	东风		1-2级	387	严重污染	6

四、其它方式排序

1. .sort_index()方法在指定的轴上根据索引进行排序,默认升序

参数: .sort_index(axis=0, ascending=True) 默认axis0(0纵1横)递增排序ascending

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(20).reshape(4, 5), index=['c', 'a', 'd', 'b'])

    0   1   2   3   4
c   0   1   2   3   4
a   5   6   7   8   9
d  10  11  12  13  14
b  15  16  17  18  19
  • 纵向向递增排序df.sort_index()
    纵向向降序排序df.sort_index(ascending=False)
print(df.sort_index(ascending=False))

    0   1   2   3   4
d  10  11  12  13  14
c   0   1   2   3   4
b  15  16  17  18  19
a   5   6   7   8   9
  • 对横轴进行降序排序df.sort_index(axis=1, ascending=False)
print(df.sort_index(axis=1, ascending=False))

    4   3   2   1   0
c   4   3   2   1   0
a   9   8   7   6   5
d  14  13  12  11  10
b  19  18  17  16  15
2. .sort_values()方法在指定轴上根据数值进行排序,默认升序

参数: Series.sort_values(axis=0, ascending=True) 默认axis0(0纵1横)递增排序ascending
参数: DataFrame.sort_values(by, axis=0, ascending=True) by: axis轴上的某个索引或索引列表

  • 在纵轴第二列进行倒叙排序.sort_values(2, ascending=False)
print(df.sort_values(2, ascending=False))

pandas(五)数据排序_多列

  • 在横轴第二列进行倒叙排序.sort_values(‘a’, axis=1,ascending=False)
print(df.sort_values('a', axis=1, ascending=False))

pandas(五)数据排序_倒序_02


注: 空值NaN放到排序末尾