参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》
pandas的数据排序类似excel的rank函数,但是用法更多。
先读取案例数据
import numpy as np
import pandas as pd
import datetime
data = 'https://www.gairuo.com/file/data/dataset/team.xlsx'
df = pd.read_excel(data)
数据排序
s.sort_index() # 升序排列
df.sort_index() # df 也是按索引进行排序
df.team.sort_index()
s.sort_index(ascending=False) # 降序排列
s.sort_index(inplace=True) # 排序后生效,改变原数据
# 索引重新0-(n-1) 排, 很有用,可以得到它的排序号
s.sort_index(ignore_index=True)
s.sort_index(na_position='first') # 空值在前,另 ‘last’
s.sort_index(level=1) # 如果多层,排一级
s.sort_index(level=1, sort_remaining=False) # 这层不排
# 行索引排序,表头排序
df.sort_index(axis=1) # 会把列按列名顺序排列
#df.reindex()指定自己定义顺序的索引,实现行和列的顺序重新定义:
df = pd.DataFrame({'A': [1,2,4],
'B': [3,5,6]}, index=['a', 'b', 'c'])
df
'''A B
a 1 3
b 2 5
c 4 6'''
# 按要求重新指定索引顺序
df.reindex(['c', 'b', 'a'])
'''A B
c 4 6
b 2 5
a 1 3'''
# 指定列顺序
df.reindex(['B', 'A'], axis=1)
'''B A
a 3 1
b 5 2
c 6 4'''
数据值排序
df.Q1.sort_values()
df.sort_values('Q2') #df要传入排序列名
df.sort_values(by=['team','name'],ascending=[True,False]) #team升序,相同的name降序
s.sort_values() # 升序
s.sort_values(ascending=False) # 降序
s.sort_values(inplace=True) # 修改生效
s.sort_values(na_position='first') # 空值在前
# df 按指定字段顺序
df.sort_values(by=['team'])
df.sort_values('Q1')
# 按多个字段,先排 team, 在同 team 内再看 Q1
df.sort_values(by=['team', 'Q1'])
# 全降序
df.sort_values(by=['team', 'Q1'], ascending=False)
# 对应指定team升Q1降
df.sort_values(by=['team', 'Q1'], ascending=[True, False])
# 索引重新0-(n-1) 排
df.sort_values('team', ignore_index=True)
混合排序
#需要索引和值混合排序,比如先按名字排序同序的再按团队排
df.set_index('name', inplace=True)
df.index.names = ['s_name']
df.sort_values(by=['s_name', 'team'])
# 以下方法也可以实现上述需求,不过要注意顺序
df.set_index('name').sort_values('team').sort_index()
按照大小值排序
s.nsmallest(3) # 最小的三个
s.nlargest(3) # 最大的三个
# 指定列
df.nlargest(3, 'Q1')
df.nlargest(5, ['Q1', 'Q2'])
df.nsmallest(len(df), ['Q1', 'Q2'])#Q1小在前,如果一样看Q2,返回指定个数
rank排序
df.rank()#返回每列排序位置
df.rank(axis=1)#返回每行排序位置
df.rank(pct=True)#相对位置