pandas的DataFrame极大地简化了数据分析过程中一些烦琐操作,它是一个表格型的数据结构, 每一列代表一个变量,而每一行则是一条记录。简答地说,DataFrame是共享同一个index 的Series的集合。

DataFrame数据的排序分为三类:

  1. 对索引排序sort_index();
  2. 对值进行排序sort_values();
  3. 是对值进行排名rank()。

(1)、索引排名


  对于索引排序,涉及到对行的索引和对列的索引进行升序或者降序排序函数df.sort_index(axis= , ascending= , inplace=),需要特别注意这三个参数。axis表示对行的索引排序,还是对列的索引进行排序;ascending表示升序,还是降序操作。

 
dates = ['2022-01-01','2022-09-02','2022-01-03','2022-01-04','2022-01-05','2022-01-06']
dates=pd.to_datetime(dates)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
 
#默认按照行的索引进行升序排序
df.sort_index()
Out[48]: 
                   A         B         C         D
2022-01-01  0.096360  0.390240 -1.272864 -0.248937
2022-01-03  2.085985 -1.026902  0.089471  0.049253
2022-01-04  0.459439  1.356780 -0.327171  0.735977
2022-01-05  0.625936 -1.434436  0.289198 -1.308614
2022-01-06  0.306561 -0.718824 -1.639355 -0.287135
2022-09-02  0.043364  2.206094  0.853971  2.067719
 
#按照列的索引进行降序排序
df.sort_index(axis=1,ascending=False)
Out[49]: 
                   D         C         B         A
2022-01-01 -0.248937 -1.272864  0.390240  0.096360
2022-09-02  2.067719  0.853971  2.206094  0.043364
2022-01-03  0.049253  0.089471 -1.026902  2.085985
2022-01-04  0.735977 -0.327171  1.356780  0.459439
2022-01-05 -1.308614  0.289198 -1.434436  0.625936
2022-01-06 -0.287135 -1.639355 -0.718824  0.306561

(2)、对值排序


  对于值排名,使用函数df.sort_values(by= , axix=,ascending= , inplace=,na_postion=)。
  注意:axis=0表示按照行进行排名,axis=1表示按照列进行排名,默认0;ascending=True表示升序,ascending=False表示降序,默认True.na_position参数用于设定缺失值的显示位置,first表示缺失值显示在最前面;last表示缺失值显示在最后面

df = pd.DataFrame(np.random.randn(6,4),index=['a','b','c','d','e','f'],columns=list('ABCD'))
 
#对单列的值进行降序排序,其他列不参与排序。
df.sort_values(by='A',axis=0,ascending=False,inplace=True)
 
#对单行的值进行降序排序,其他行不参与排序
f.sort_values(by='b',axis=1,ascending=False,inplace=True)
 
#对多列的值进行降序排序
df.sort_values(by='A',axis=0,ascending=False,inplace=True)
 
df.loc['g','A']=1
df.sort_values(by='A',axis=0,ascending=False,inplace=True,na_position="first")

(3)、对值排名

        对于值排名,使用函数rank(axis= , ascending= ,method,na_position=),。
  注意:axis=0表示按照行进行排名,axis=1表示按照列进行排名,默认0;ascending=True表示升序,ascending=False表示降序,默认True.method='average'是表示值相等时,都取平均排序作为排名,method='min'表示值相等时,都取最小排序作为排名,method='max'表示值相等时,都取最大排序作为排名,method='first'表示值相等时,自然位置前者排前面,method='dense'表示值相等时,都取最小排序作为排名,且后续排名仅跟+1。

df['A']
Out[74]: 
a    0.0
b    1.0
c    1.0
d    1.0
e    1.0
f    1.0
g    3.0
h    3.0
 
df['A'].rank()
Out[75]: 
a    1.0
b    4.0
c    4.0
d    4.0
e    4.0
f    4.0
g    7.5
h    7.5
 
df['A'].rank(method='first')
Out[76]: 
a    1.0
b    2.0
c    3.0
d    4.0
e    5.0
f    6.0
g    7.0
h    8.0
 
df['A'].rank(method='average')
Out[77]: 
a    1.0
b    4.0
c    4.0
d    4.0
e    4.0
f    4.0
g    7.5
h    7.5
 
df['A'].rank(method='min')
Out[78]: 
a    1.0
b    2.0
c    2.0
d    2.0
e    2.0
f    2.0
g    7.0
h    7.0
 
df['A'].rank(method='max')
Out[79]: 
a    1.0
b    6.0
c    6.0
d    6.0
e    6.0
f    6.0
g    8.0
h    8.0
 
df['A'].rank(method='dense')
Out[80]: 
a    1.0
b    2.0
c    2.0
d    2.0
e    2.0
f    2.0
g    3.0
h    3.0
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐