比较系统的学习 pandas(7)

 进行数据排序

1、索引排序

data.sort_index(ascending=True)

df.sort_index()实现按索引排序,默认以从小到大的升序方式排列,若按降序排序,则设置ascending=False

data.sort_index()  #按行索引,进行升序排序
data.sort_index(ascending=False)  #按行索引,进行降序排序


# 在列索引方向上排序
data.sort_index(axis=1) #按列索引,进行升序排序
data.sort_index(axis=1, ascending=False)   #按列索引,进行降序排序



s.sort_index() # 升序排列



data["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
'''

2、进行数值排序

data.sort_values(ascending=True)

数据值的排序主要使用sort_values(),数字按大小顺序,字符按字 母顺序。默认排序是升序

data.sort_values()

data["语文"].sort_values()  #等价于 data.sort_values("语文")


data.sort_values(by=['team', 'name'], ascending=[True, False])  #先按team升序排列,
如遇到相同的team再按name降序排列。

"""
name team Q1 Q2 Q3 Q4
0 Tyler A 75 16 44 63
1 Toby A 52 27 17 68
2 Stanley A 69 71 39 97
3 Reggie1 A 30 12 23 9
4 Oscar A 77 9 26 67

"""


data.sort_values(ascending=False) # 降序

data.sort_values(inplace=True) # 修改生效

data.sort_values(na_position='first') # 空值在前

# data按指定字段排列
data.sort_values(by=['team'])

df.sort_values('Q1')

# 按多个字段,先排team,在同team内再看Q1
data.sort_values(by=['team', 'Q1'])

# 全降序
data.sort_values(by=['team', 'Q1'], ascending=False)

# 对应指定team升Q1降
data.sort_values(by=['team', 'Q1'], ascending=[True, False])

# 索引重新0-(n-1)排
data.sort_values('team', ignore_index=True)

3、进行混合排序

有时候需要用索引和数据值混合排序。

下例中假如name是索引,我 们需要先按team排名,再按索引排名:

先按team排名,再按索引排名

data.set_index('name', inplace=True) # 设置name为索引
data.index.names = ['s_name'] # 给索引起名
data.sort_values(by=['s_name', 'team']) # 排序


# 设置索引,按team排序,再按索引排序
data.set_index('name').sort_values('team').sort_index()

4、按值大小排序

nsmallest()和nlargest()用来实现数字列的排序,并可指定返回的个数

注意:仅支持数字类型的排序

# 先按Q1最小在前,如果相同,Q2小的在前,显示前 5个
data.nsmallest(5, ['Q1', 'Q2'])


s.nsmallest(3) # 最小的3个

s.nlargest(3) # 最大的3个

# 指定列
df.nlargest(3, 'Q1')

data.nsmallest(5, ['Q1', 'Q2'])
df.nlargest(5, ['Q1', 'Q2'])

你可能感兴趣的:(数据分析,pandas)