pandas 4 - 排序( tcy)
发布日期:2021-06-29 14:47:58 浏览次数:3 分类:技术文章

本文共 4079 字,大约阅读时间需要 13 分钟。

排序 2018/12/1 2018/12/15 
分类:按索引标签排序,按列值排序,以及两者的组合排序

1.1 序列按值,索引排序:

s=pd.Series(np.arange(4),index=list('dabc'))s.sort_values()              # 按值排序s.sort_index(ascending=True) # 按行或列索引排序 

1.2序列多索引排序: 

arrays = [np.array(['d4', 'd4', 'b2', 'b2','c3', 'c3', 'a1', 'a1']),np.array(['ss2', 'ss1', 'ss2', 'ss1','ss2', 'ss1', 'ss2', 'ss1'])]s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8], index=arrays)s.sort_index(level=1)                      #指定要排序的索引级别s.sort_index(level=1, sort_remaining=False)#按级别排序时,不按剩余级别排序# s            # 输出:        # 输出:# d4 ss2 1     # a1 ss1 8     # d4 ss1 2#    ss1 2     # b2 ss1 4     # b2 ss1 4# b2 ss2 3     # c3 ss1 6     # c3 ss1 6#    ss1 4     # d4 ss1 2     # a1 ss1 8# c3 ss2 5     # a1 ss2 7     # d4 ss2 1#    ss1 6     # b2 ss2 3     # b2 ss2 3# a1 ss2 7     # c3 ss2 5     # c3 ss2 5#    ss1 8     # d4 ss2 1     # a1 ss2 7# dtype: int64 # dtype: int64 # dtype: int64  

2.1数据帧按值排序:  

df1 = pd.DataFrame({'A1':[2,1,1,1],'A2':[1,3,2,4],'A3':[5,4,3,2]})df1[['A1', 'A2', 'A3']].sort_values(by=['A1','A2']) #值按列排序df1.sort_values(by=3,axis=1)                        #值按行排序df = pd.DataFrame({'A1' : ['a', 'a', 'b', np.nan, 'd', 'c'],#不能够按行值排序                   'A2' : [2, 1, 9, 8, 7, 4],'A3': [0, 1, 9, 4, 2, 3]})df.sort_values(by=['A1', 'A2'])          #按A1A2列值排序df.sort_values(by='A1', ascending=False) #按A1列值排序降序# df          #输出         #输出#   A1  A2 A3 #   A1  A2 A3 #   A1  A2 A3# 0 a   2  0  # 1 a   1  1  # 4 D   7  2# 1 a   1  1  # 0 a   2  0  # 5 C   4  3# 2 b   9  9  # 2 b   9  9  # 2 B   9  9# 3 NaN 8  4  # 5 c   4  3  # 0 A   2  0# 4 d   7  2  # 4 d   7  2  # 1 A   1  1# 5 c   4  3  # 3 NaN 8  4  # 3 NaN 8  4  

2.2数据帧按索引排序: 

df=pd.DataFrame(np.arange(8).reshape(2,4),index=['a','b'],columns=list('DABC'))df.sort_index(axis=0,ascending=True)# 按行标签排序df.sort_index(axis=1,ascending=True)# 按列标签排序df.reindex(index=['a', 'b', 'c'], columns=['A', 'B', 'E'])  

2.3按索引和值排序: 

# 作为by参数可以引用列或索引级别名称。idx = pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('a', 2), ('b', 2), ('b', 1), ('b', 1)])idx.names = ['first', 'second']df = pd.DataFrame({'A': np.arange(6, 0, -1)},index=idx)df.sort_values(by=['second', 'A'])#按'second'(索引)和'A'(列)排序# df           #df.sort_values#              A  #              A# first second    # first second# a     1      6  # b     1      1#       2      5  #       1      2#       2      4  # a     1      6# b     2      3  # b     2      3#       1      2  # a     2      4#       1      1  #       2      5  
3.searchsorted()# 1D 查找应该插入元素以维持顺序的索引
s.searchsorted(value, side='left', sorter=None)#查找应该插入元素以维持顺序的索引s = pd.Series([10,12,13,15])s.searchsorted([10, 13]) # array([0, 2]) <=10都为0s.searchsorted([10, 14]) # array([0, 3]) >13 and <=15都为3s.searchsorted([11, 13], side='right') # array([1, 3])s.searchsorted([11, 13], side='left')  # array([1, 2], dtype=int64)s = pd.Series([3, 1, 2])s.searchsorted([0, 3], sorter=np.argsort(s)) # array([0, 2])  
4.最小/最大值索引nsmallest()和nlargest() # 快于head(n)
实例1:-Series s = pd.Series([4,2,3,5,6,0,1])s.sort_values()# 0...6s.nsmallest(3) # 0 1 2s.nlargest(3) # 6 5 4  

 

实例2:-DataFrame df = pd.DataFrame({'a': [-2, -1, 1, 10, 8, 11, -1], 'b': list('abdceff'),'c': [1.0, 2.0, 4.0, 3.2, np.nan, 3.0, 4.0]})df.nlargest(3, 'a') , df.nlargest(3, ['a', 'c'])df.nsmallest(3, 'a'),df.nsmallest(3, ['a', 'c'])# a b c # a b c# 0 -2 a 1.0 # 0 -2 a 1.0# 1 -1 b 2.0 # 1 -1 b 2.0# 6 -1 f 4.0 # 6 -1 f 4.0  

5.rank()返回从小到大排序的下标 

s = pd.Series([7,-5,7,4,2,0,4])s.rank(method='first')#根据值在原数据中出现的顺序排名df=pd.Datadf({'b':[5,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-3]})df.rank(axis=0) #指定要进行排序的轴  

备注:

obj.sort_values(axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')#按值排序obj.sort_index(axis=0, level=None, ascending=True, inplace=False,               kind='quicksort', na_position='last', sort_remaining=True) #按索引标签排序# 参数:# axis=0     #轴直接排序。对于系列来说,这只能是0。# level:int #对指定索引级别的值进行排序。# ascending=true #默认按升序排序。# inplace=False  #为True则就地执行操作。# kind:       {'quicksort','mergesort','heapsort'}选择排序算法# na_position:{'first','last'} #将NaN放在开头或最后。# sort_remaining=True            #按级别排序,是否按剩余级别排序  

 

 

 

 

转载地址:https://chunyou.blog.csdn.net/article/details/84684650 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:pandas 学习汇总5 - index 创建( tcy)
下一篇:pandas 学习汇总3 - Series,DataFrame迭代iter( tcy)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月30日 11时21分13秒