Python系列----pandas的排序、排名
這期主要跟大家介紹pandas的.sort_index()、.sort_values()和rank()
原數據
import pandas as pd
df = pd.DataFrame({'b':[1,2,3,2], 'a':[4,3,2,1], 'c':[1,3,8,2]}, index=[2,0,1,3])
s = pd.DataFrame([1,3,2,1,6], index=["a","c","d","b","e"])
df
Out[1]:
b a c
2 1 4 1
0 2 3 3
1 3 2 8
3 2 1 2
s
Out[2]:
0
a 1
c 3
d 2
b 1
e 6
.sort_index() 索引排序
索引排序,顧名思義是根據索引排序,也就是根據數據框的列/行標籤進行排序
df.sort_index() # 按行標籤排序
df.sort_index(axis = 1) # 按列標籤排序
df.sort_index() # 按行標籤排序
Out[3]:
b a c
0 2 3 3
1 3 2 8
2 1 4 1
3 2 1 2
df.sort_index(axis = 1) # 按列標籤排序
Out[4]:
a b c
2 4 1 1
0 3 2 3
1 2 3 8
3 1 2 2
.sort_values() 值排序
值排序,則是根據你參數by所指定的行或列的值進行排序
df.sort_values(by = 'b') # 按b列升序排列
df.sort_values(by=3, axis=1, ascending=[False]) # 按行3降序排列
df.sort_values(by=['b','a'], ascending=[False,True]) # 先按b列降序,再按a列升序排序
df.sort_values(by = 'b') # 按b列升序排列
Out[7]:
b a c
2 1 4 1
0 2 3 3
3 2 1 2
1 3 2 8
df.sort_values(by=3, axis=1, ascending=[False]) # 按行3降序排列
Out[8]:
b c a
2 1 1 4
0 2 3 3
1 3 8 2
3 2 2 1
df.sort_values(by=['b','a'], ascending=[False,True]) # 先按b列降序,再按a列升序排序
Out[9]:
b a c
1 3 2 8
3 2 1 2
0 2 3 3
2 1 4 1
rank() 排名
排名,則是對值進行排列,得出值在該組中對應的排名,排名的方式依據參數method來限定,默認平均排名,即相同值的排名取這些值排名的平均值作爲這幾個數的排名(相同值的排名會相同)
s.rank() # 平均排名
s.rank(method='first') # 按出現順序分配排名
s.rank() # 平均排名
Out[10]:
0
a 1.5
c 4.0
d 3.0
b 1.5
e 5.0
s.rank(method='first') # 按出現順序分配排名
Out[11]:
0
a 1.0
c 4.0
d 3.0
b 2.0
e 5.0
其他排名方法運用同理,改一下method的值就可以了,大家可以自行運行觀察結果
method參數
(1)average使用平均排名,也是默認的排名方式
(2)first按值在原始數據中的出現順序分配排名
(3)min用整個分組的最小排名
(4)max用整個分組的最大排名
通用參數總結
1、axis參數默認爲0,即按列排序,所以按行排序的必須有參數axis=1
2、ascending參數默認爲Ture,即升序排序,而 False:降序排序,使用時用ascending=[False]