Hi~今天给大家带来Python和R两种语言中各种数据结构的排序方法。这两种语言都是一手一个的必备工具,虽然AI如此发达,但基本功还是要有,掌握它们的排序技巧可以让我们的数据处理更加得心应手!
# 创建一个列表
x = [5, 2, 8, 1, 9, 3]
print(x)
[5, 2, 8, 1, 9, 3]
x.sort()
print(x) # 👉 从小到大
[1, 2, 3, 5, 8, 9]
x.sort(reverse=True)
print(x) # 👉 从大到小
[9, 8, 5, 3, 2, 1]
x = [5, 2, 8, 1, 9, 3] # 重新创建列表
x2 = sorted(x)
print(x2) # 👉 从小到大
[1, 2, 3, 5, 8, 9]
x3 = sorted(x,reverse=True)
print(x3) # 👉 从大到小
[9, 8, 5, 3, 2, 1]
import numpy as np
# 创建一个NumPy数组
x = np.array([5, 2, 8, 1, 9, 3])
x
array([5, 2, 8, 1, 9, 3])
# 使用sort()函数
x2 = np.sort(x)
x2 # 升序
array([1, 2, 3, 5, 8, 9])
没有现成的降序参数,但可以用取子集的方式让它倒序排列
x3 = np.sort(x)[::-1]
x3
array([9, 8, 5, 3, 2, 1])
这里用到了切片语法 [start:end:step] :
前面两个冒号是因为start和end省略了,就是指所有元素
当 step 为正数时,从左往右取值
当 step 为负数时,从右往左取值
[::-1] 表示从后往前取所有元素,即反转数组
series是数据框里的一列,再输出结果里有两列是因为它和数据框一样有索引(行名)
import pandas as pd
# 创建一个Series
x = pd.Series([5, 2, 8, 1, 9, 3])
print(x)
0 5
1 2
2 8
3 1
4 9
5 3
dtype: int64
# 使用sort_values()方法
print(x.sort_values()) # 升序
3 1
1 2
5 3
0 5
2 8
4 9
dtype: int64
print(x.sort_values(ascending=False)) # 降序
4 9
2 8
0 5
5 3
1 2
3 1
dtype: int64
import pandas as pd
# 创建一个学生年龄和成绩DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Amy', 'Jack', 'Lisa'],
'age': [16, 15, 17, 16],
'score': [85, 92, 88, 95]
})
print(df)
name age score
0 Tom 16 85
1 Amy 15 92
2 Jack 17 88
3 Lisa 16 95
# 单列排序
print(df.sort_values('score'))
name age score
0 Tom 16 85
2 Jack 17 88
1 Amy 15 92
3 Lisa 16 95
print(df.sort_values('score', ascending=False))
name age score
3 Lisa 16 95
1 Amy 15 92
2 Jack 17 88
0 Tom 16 85
# 多列排序
print(df.sort_values(['age', 'score'],
ascending=[True, False]))
name age score
1 Amy 15 92
3 Lisa 16 95
0 Tom 16 85
2 Jack 17 88
多列排序的意思用这个例子来讲:先按照age排序,如果age相同则按照score排序!
数据结构 | 排序方法 | 类型 | 降序参数 | 空值处理 |
---|---|---|---|---|
Vector | sort() | 函数 | decreasing=TRUE | 默认排在后面 |
Data Frame | arrange() | 函数 | desc() | 默认排在后面 |
# 创建一个向量
x <- c(5, 2, 8, 1, 9, 3)
x # 看看原始数据
## [1] 5 2 8 1 9 3
# 使用sort()函数
x2 <- sort(x)
x2 # 👉 升序:从小到大
## [1] 1 2 3 5 8 9
x3 <- sort(x, decreasing = TRUE)
x3 # 👉 降序:从大到小
## [1] 9 8 5 3 2 1
# 创建一个学生成绩数据框
df <- data.frame(
name = c("Tom", "Amy", "Jack", "Lisa"),
age = c(16, 15, 17, 16),
score = c(85, 92, 88, 95)
)
df
## name age score
## 1 Tom 16 85
## 2 Amy 15 92
## 3 Jack 17 88
## 4 Lisa 16 95
# 使用dplyr包
library(dplyr)
# 单列排序
df %>%
arrange(score) # 👉 按成绩升序
## name age score
## 1 Tom 16 85
## 2 Jack 17 88
## 3 Amy 15 92
## 4 Lisa 16 95
df %>%
arrange(desc(score)) # 👉 按成绩降序
## name age score
## 1 Lisa 16 95
## 2 Amy 15 92
## 3 Jack 17 88
## 4 Tom 16 85
# 多列排序
df %>%
arrange(age, desc(score)) # 👉 先按年龄升序,再按成绩降序
## name age score
## 1 Amy 15 92
## 2 Lisa 16 95
## 3 Tom 16 85
## 4 Jack 17 88
还是R语言里面的数据结构简单。
不论是数据框里的一列,还是矩阵里的一行、一列都是向量,没有那么多多余的数据结构呀。
R语言的列表就没什么必要排序了,如果非要排,那完全可以转换成向量再排了。