Pandas怎样对数据进行排序?

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

0、读取数据

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.head()
ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
02018-01-013-6晴~多云东北风1-2级592
12018-01-022-5阴~多云东北风1-2级491
22018-01-032-5多云北风1-2级281
32018-01-040-8东北风1-2级281
42018-01-053-6多云~晴西北风1-2级501

1、Series的排序

df["aqi"].sort_values()
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
df["aqi"].sort_values(ascending=False)
86     387
72     293
91     287
71     287
317    266
      ... 
301     22
272     22
249     22
281     21
271     21
Name: aqi, Length: 365, dtype: int64
df["tianqi"].sort_values()
225     中雨~小雨
230     中雨~小雨
197    中雨~雷阵雨
196    中雨~雷阵雨
112        多云
        ...  
191    雷阵雨~大雨
219     雷阵雨~阴
335      雾~多云
353         霾
348         霾
Name: tianqi, Length: 365, dtype: object

2、DataFrame的排序

2.1 单列排序

df.sort_values(by="aqi")
ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
2712018-09-292211北风3-4级211
2812018-10-09154多云~晴西北风4-5级211
2492018-09-072716西北风3-4级221
2722018-09-301913多云西北风4-5级221
3012018-10-29153北风3-4级221
3172018-11-14135多云南风1-2级266重度污染5
712018-03-13175晴~多云南风1-2级287重度污染5
912018-04-022611多云北风1-2级287重度污染5
722018-03-14156多云~阴东北风1-2级293重度污染5
862018-03-28259多云~晴东风1-2级387严重污染6

365 rows × 9 columns

df.sort_values(by="aqi", ascending=False)
ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
862018-03-28259多云~晴东风1-2级387严重污染6
722018-03-14156多云~阴东北风1-2级293重度污染5
712018-03-13175晴~多云南风1-2级287重度污染5
912018-04-022611多云北风1-2级287重度污染5
3172018-11-14135多云南风1-2级266重度污染5
2492018-09-072716西北风3-4级221
3012018-10-29153北风3-4级221
2722018-09-301913多云西北风4-5级221
2712018-09-292211北风3-4级211
2812018-10-09154多云~晴西北风4-5级211

365 rows × 9 columns

2.2 多列排序

# 按空气质量等级、最高温度排序,默认升序
df.sort_values(by=["aqiLevel", "bWendu"])
ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
3602018-12-27-5-12多云~晴西北风3级481
222018-01-23-4-12西北风3-4级311
232018-01-24-4-11西南风1-2级341
3402018-12-07-4-10西北风3级331
212018-01-22-3-10小雪~多云东风1-2级471
712018-03-13175晴~多云南风1-2级287重度污染5
902018-04-012511晴~多云南风1-2级218重度污染5
912018-04-022611多云北风1-2级287重度污染5
852018-03-272711南风1-2级243重度污染5
862018-03-28259多云~晴东风1-2级387严重污染6

365 rows × 9 columns

# 两个字段都是降序
df.sort_values(by=["aqiLevel", "bWendu"], ascending=False)
ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
862018-03-28259多云~晴东风1-2级387严重污染6
852018-03-272711南风1-2级243重度污染5
912018-04-022611多云北风1-2级287重度污染5
902018-04-012511晴~多云南风1-2级218重度污染5
712018-03-13175晴~多云南风1-2级287重度污染5
3622018-12-29-3-12西北风2级291
222018-01-23-4-12西北风3-4级311
232018-01-24-4-11西南风1-2级341
3402018-12-07-4-10西北风3级331
3602018-12-27-5-12多云~晴西北风3级481

365 rows × 9 columns

# 分别指定升序和降序
df.sort_values(by=["aqiLevel", "bWendu"], ascending=[True, False])
ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
1782018-06-283524多云~晴北风1-2级331
1492018-05-303318西风1-2级461
2062018-07-263325多云~雷阵雨东北风1-2级401
1582018-06-083219多云~雷阵雨西南风1-2级431
2052018-07-253225多云北风1-2级281
3172018-11-14135多云南风1-2级266重度污染5
3292018-11-26100多云东南风1级245重度污染5
3352018-12-0292雾~多云东北风1级234重度污染5
572018-02-2770东风1-2级220重度污染5
862018-03-28259多云~晴东风1-2级387严重污染6

365 rows × 9 columns

本文章有配套视频讲解,关注公众号:蚂蚁学Python,查看视频、获取源码

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注