pandas数据排序¶

Series的排序:¶

Series.sort_values(ascending = True,inplace = False) 参数说明:

  • ascending: 默认为True升序排序,为False降序排序
  • inplace:是否修改原始Serise

DataFrame的排序:¶

DataFrame.sort_values(by,ascending = True,inplace = False) 参数说明:

  • by:字符串或者List<字符串>,单列排序或者多列排序
  • ascending:bool或者List,升序还是降序,如果是list对应by的多列
  • inplace:是否修改原始FataFrame
In [1]:
import pandas as pd
fpath = "../datas/beijing_tianqi/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")
df
Out[1]:
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
... ... ... ... ... ... ... ... ... ...
360 2018-12-27 -5 -12 多云~晴 西北风 3级 48 优 1
361 2018-12-28 -3 -11 晴 西北风 3级 40 优 1
362 2018-12-29 -3 -12 晴 西北风 2级 29 优 1
363 2018-12-30 -2 -11 晴~多云 东北风 1级 31 优 1
364 2018-12-31 -2 -10 多云 东北风 1级 56 良 2

365 rows × 9 columns

1.Series的排序¶

In [2]:
df["aqi"].sort_values()
Out[2]:
271     21
281     21
249     22
272     22
301     22
      ... 
317    266
71     287
91     287
72     293
86     387
Name: aqi, Length: 365, dtype: int64
In [3]:
df["aqi"].sort_values(ascending=False)
Out[3]:
86     387
72     293
71     287
91     287
317    266
      ... 
249     22
301     22
272     22
271     21
281     21
Name: aqi, Length: 365, dtype: int64
In [4]:
df["tianqi"].sort_values()#会和拼音的排序ASCII有关
Out[4]:
225     中雨~小雨
230     中雨~小雨
197    中雨~雷阵雨
196    中雨~雷阵雨
112        多云
        ...  
191    雷阵雨~大雨
219     雷阵雨~阴
335      雾~多云
353         霾
348         霾
Name: tianqi, Length: 365, dtype: object

2.DataFrame 的排序¶

2.1单列排序¶

In [5]:
df.sort_values(by="aqi")
Out[5]:
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
249 2018-09-07 27 16 晴 西北风 3-4级 22 优 1
272 2018-09-30 19 13 多云 西北风 4-5级 22 优 1
301 2018-10-29 15 3 晴 北风 3-4级 22 优 1
... ... ... ... ... ... ... ... ... ...
317 2018-11-14 13 5 多云 南风 1-2级 266 重度污染 5
71 2018-03-13 17 5 晴~多云 南风 1-2级 287 重度污染 5
91 2018-04-02 26 11 多云 北风 1-2级 287 重度污染 5
72 2018-03-14 15 6 多云~阴 东北风 1-2级 293 重度污染 5
86 2018-03-28 25 9 多云~晴 东风 1-2级 387 严重污染 6

365 rows × 9 columns

In [6]:
df.sort_values(by="aqi",ascending=False)
Out[6]:
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
86 2018-03-28 25 9 多云~晴 东风 1-2级 387 严重污染 6
72 2018-03-14 15 6 多云~阴 东北风 1-2级 293 重度污染 5
71 2018-03-13 17 5 晴~多云 南风 1-2级 287 重度污染 5
91 2018-04-02 26 11 多云 北风 1-2级 287 重度污染 5
317 2018-11-14 13 5 多云 南风 1-2级 266 重度污染 5
... ... ... ... ... ... ... ... ... ...
249 2018-09-07 27 16 晴 西北风 3-4级 22 优 1
301 2018-10-29 15 3 晴 北风 3-4级 22 优 1
272 2018-09-30 19 13 多云 西北风 4-5级 22 优 1
271 2018-09-29 22 11 晴 北风 3-4级 21 优 1
281 2018-10-09 15 4 多云~晴 西北风 4-5级 21 优 1

365 rows × 9 columns

2.2多列排序¶

In [8]:
# 按空气质量等级。最高温度排序。默认升序
df.sort_values(by=["aqiLevel","bWendu"])
Out[8]:
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
23 2018-01-24 -4 -11 晴 西南风 1-2级 34 优 1
340 2018-12-07 -4 -10 晴 西北风 3级 33 优 1
21 2018-01-22 -3 -10 小雪~多云 东风 1-2级 47 优 1
... ... ... ... ... ... ... ... ... ...
71 2018-03-13 17 5 晴~多云 南风 1-2级 287 重度污染 5
90 2018-04-01 25 11 晴~多云 南风 1-2级 218 重度污染 5
91 2018-04-02 26 11 多云 北风 1-2级 287 重度污染 5
85 2018-03-27 27 11 晴 南风 1-2级 243 重度污染 5
86 2018-03-28 25 9 多云~晴 东风 1-2级 387 严重污染 6

365 rows × 9 columns

In [9]:
#两个字段都是降序
df.sort_values(by=["aqiLevel","bWendu"],ascending=False)
Out[9]:
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
86 2018-03-28 25 9 多云~晴 东风 1-2级 387 严重污染 6
85 2018-03-27 27 11 晴 南风 1-2级 243 重度污染 5
91 2018-04-02 26 11 多云 北风 1-2级 287 重度污染 5
90 2018-04-01 25 11 晴~多云 南风 1-2级 218 重度污染 5
71 2018-03-13 17 5 晴~多云 南风 1-2级 287 重度污染 5
... ... ... ... ... ... ... ... ... ...
362 2018-12-29 -3 -12 晴 西北风 2级 29 优 1
22 2018-01-23 -4 -12 晴 西北风 3-4级 31 优 1
23 2018-01-24 -4 -11 晴 西南风 1-2级 34 优 1
340 2018-12-07 -4 -10 晴 西北风 3级 33 优 1
360 2018-12-27 -5 -12 多云~晴 西北风 3级 48 优 1

365 rows × 9 columns

In [10]:
#分别指定升序和降序
df.sort_values(by=["aqiLevel","bWendu"],ascending=[True,False])
Out[10]:
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
178 2018-06-28 35 24 多云~晴 北风 1-2级 33 优 1
149 2018-05-30 33 18 晴 西风 1-2级 46 优 1
206 2018-07-26 33 25 多云~雷阵雨 东北风 1-2级 40 优 1
158 2018-06-08 32 19 多云~雷阵雨 西南风 1-2级 43 优 1
205 2018-07-25 32 25 多云 北风 1-2级 28 优 1
... ... ... ... ... ... ... ... ... ...
317 2018-11-14 13 5 多云 南风 1-2级 266 重度污染 5
329 2018-11-26 10 0 多云 东南风 1级 245 重度污染 5
335 2018-12-02 9 2 雾~多云 东北风 1级 234 重度污染 5
57 2018-02-27 7 0 阴 东风 1-2级 220 重度污染 5
86 2018-03-28 25 9 多云~晴 东风 1-2级 387 严重污染 6

365 rows × 9 columns

In [ ]: