开发者

python3多重排序处理多数据的示例详解

开发者 https://www.devze.com 2024-08-10 11:45 出处:网络 作者: 码农研究僧
目录前言1. 内置 sorted() 函数与 lambda 表达式2. operator 模块3. pandas 库4. numpy 库5. 自定义前言
目录
  • 前言
  • 1. 内置 sorted() 函数与 lambda 表达式
  • 2. operator 模块
  • 3. pandas 库
  • 4. numpy 库
  • 5. 自定义

前言

主要讲解多种方式的处理,以实际的Demo为主

方法优点缺点
内置 sorted() 函数与 lambda 表达式简单易用,代码简洁

适合处理较小的数据集

对于大型数据集,性能可能不如专用的库高效
operator 模块提高可读性,尤其是在复杂键提取的情况下仍然是基于 sorted() 的实现,对于大型数据集,性能有限
pandas 库高效处理大型数据集

提供丰富的数据操作功能

需要学习和掌握 pandas 库的使用
numpy 库高效处理数值数据

适用于大型数值数据集

对于非数值数据(如字符串),可能不如 pandas 方便

1. 内置 sorted() 函数与 lambda 表达式

提供一个键函数来实现多重排序

键函数可以是一个 lambda 表达式,用来返回一个元组,元组中的每个元素按照优先级进行排序

data = [
    {'name': 'Alice', 'age': 30, 'score': 88},
    {'name': 'Bob', 'age': 25, 'score': 92},
    {'name': 'Charlie', 'age': 30, 'score': 95},
    {'name': 'David', 'age': 25, 'score': 85}
]

# 按 age 和 score 排序,age 升序,score 降序
sorted_data = sorted(data, key=lambda x: (x['age'], -x['score']))

print(sorted_data)

截图大致如下:

python3多重排序处理多数据的示例详解

sorted() 函数不仅可以处理数字数据,还可以处理字符串和其他非http://www.devze.com数字数据

通过 lambda 表达式,可以指定任意的排序逻辑

data = [
    {'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
    {'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
    {'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
    {'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]

# 按 department 和 role 排序
sorted_data = sorted(data, key=lambda x: (x['department'], x['role']))

print(sorted_data)

数据先按 department 字段排序,再按 role 字段排序

2. operator 模块

from operator import itemgetter

data = [
    {'name': 'Alice', 'age': 30, 'score': 88},
    {'name': 'Bob', http://www.devze.com'age': 25, 'score': 92},
    {'name': 'Charlie', 'age': 30, 'score': 95},
    {'name': 'David', 'age': 25, 'score': 85}
]

# 按 age 和 score 排序,age 升序,score 降序
sorted_data = sorted(data, key=itemgetter('age', 'score'), reverse=True)
# 注意:要实现 age 升序,score 降序,我们需要稍作调整
sorted_data = sorted(sorted_data, key=itemgetter('age'))

print(sorted_data)

operator 模块中的 itemgetter 函数也适用于非数字数据的排序

from operator import itemgetter

data = [
    {'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
    {'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
    {'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
    {'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]

# 按 department 和 role 排序
sorted_data = sorted(data, key=itemgetter('department', 'role'))

print(sorted_data)

3. pandas 库

大型数据集,使用 pandas 库可以更高效地进行多重排序

import pandas as pd

data = [
    {'name': 'Alice', 'age': 30, 'score': 88},
    {'name': 'Bob', 'age': 25, 'score': 92},
    {'name': 'Charlie', 'age': 30, 'score': 95},
    {'name': 'David', 'age': 25, 'score': 85}
]

df = pd.DataFrame(data)

# 按 age 升序和 score 降序排序
sorted_df = df.sort_values(by=['age', 'score'], ascending=[True, False])

print(sorted_df)

同样可处理非数字

import pandas as pd

data = [
    {'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
    {'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
    {'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
    {'name': 'David',python 'department': 'Engineering', 'role': 'Manager'}
]

df = pd.DataFrame(data)

# 按 department 和 role 排序
sorted_df = df.sort_values(by=['deparphptment', 'role'])

print(sorted_df)

4. numpy 库

适用于数值数据

import numpy as np

data = np.array([
    ('Alice', 30, 88),
    ('Bob', 25, 92),
    ('Charlie', 30, 95),
    ('David', 25, 85)
], dtype=[('name', 'U10'), ('age', 'i4'), ('score', 'i4')])

# 按 age 升序和 score 降序排序
sorted_data = np.sort(data, order=['age', 'score'])[::-1]
sorted_data = np.sort(sorted_data, order=['age'])

print(sorted_data)

5. 自定义

某些情况下,可能需要更复杂的排序逻辑,可以定义自定义排序函数并将其传递给 sorted() 函数

data = [
    {'name': 'Alice', 'department': 'HR', 'role': 'Manager'},
    {'name': 'Bob', 'department': 'Engineering', 'role': 'Developer'},
    {'name': 'Charlie', 'department': 'HR', 'role': 'Assistant'},
    {'name': 'David', 'department': 'Engineering', 'role': 'Manager'}
]

# 自定义排序函数
def custom_sort(item):
    return (item['department'], item['role'])

# 按 department 和 role 排序
sorted_data = sortjsed(data, key=custom_sort)

print(sorted_data)

截图如下:

python3多重排序处理多数据的示例详解

到此这篇关于python3多重排序处理多数据的示例详解的文章就介绍到这了,更多相关python3多重排序处理多数据内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号