玩转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))
在横轴第二列进行倒叙排序.sort_values(‘a’, axis=1,ascending=False)
print(df.sort_values('a', axis=1, ascending=False))
注: 空值NaN放到排序末尾