pandas 4 - 排序( tcy)

2024-03-20 09:48
文章标签 排序 pandas tcy

本文主要是介绍pandas 4 - 排序( tcy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

排序 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都为0
s.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...6
s.nsmallest(3) # 0 1 2
s.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            #按级别排序,是否按剩余级别排序  

 

 
 

 

这篇关于pandas 4 - 排序( tcy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829074

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

鸡尾酒排序算法

目录 引言 一、概念 二、算法思想 三、图例解释 1.采用冒泡排序:   2.采用鸡尾酒排序:  3.对比总结 四、算法实现  1.代码实现  2.运行结果 3.代码解释   五、总结 引言 鸡尾酒排序(Cocktail Sort),也被称为双向冒泡排序,是一种改进的冒泡排序算法。它在冒泡排序的基础上进行了优化,通过双向遍历来减少排序时间。今天我们将学习如何在C

快速排序(java代码实现)

简介: 1.采用“分治”的思想,对于一组数据,选择一个基准元素,这里选择中间元素mid 2.通过第一轮扫描,比mid小的元素都在mid左边,比mid大的元素都在mid右边 3.然后使用递归排序这两部分,直到序列中所有数据均有序为止。 public class csdnTest {public static void main(String[] args){int[] arr = {3,

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,