Pandas分组与排序的实现

  • Post category:Python

Pandas是Python数据分析库,能够灵活、高效地完成数据的处理、清洗和分析等工作。其中Pandas分组与排序是常用的数据处理方法,本文将详细讲解如何实现Pandas分组与排序。

分组实现

groupby方法

Pandas的groupby方法能够将数据集按照特定条件进行分组,常用语法如下:

data.groupby("列名")

其中”data”表示数据集,”列名”表示按照哪一列进行分组。例如下面的代码可以将数据集按照”sex”列进行分组:

import pandas as pd

data = pd.read_csv("data.csv")
groups = data.groupby("sex")

分组函数

在分组完成后,为了对分组结果进行其他计算,Pandas提供了多种函数供选择:

  • agg(func, *args, **kwargs):对数据进行聚合计算,可以传入多个聚合函数,如maxminmeansum等。
  • apply(func, *args, **kwargs):对分组后的结果应用一个函数。
  • filter(func, *args, **kwargs):将满足条件的数据点筛选出来,返回过滤后的数据。
  • transform(func, *args, **kwargs):对每个分组应用一个函数,返回与原数据集大小相同的新数据集。

例如下面的示例对数据集按”sex”列进行分组,并计算每组中”salary”的平均值和标准差:

import pandas as pd

data = pd.read_csv("data.csv")
groups = data.groupby("sex") 

# 对分组后的结果应用 mean和std 函数 
result = groups["salary"].agg([np.mean, np.std])
print(result)

多列分组

有时候需要按照多列对数据进行分组,可以在groupby方法中传入多个列名:

data.groupby(["column_name1", "column_name2"])

例如下面的示例对数据集同时按”sex”列和”department”列进行分组,并计算每组中”salary”的平均值和标准差:

import pandas as pd

data = pd.read_csv("data.csv")
groups = data.groupby(["sex", "department"])

# 对分组后的结果应用 mean和std 函数 
result = groups["salary"].agg([np.mean, np.std])
print(result)

排序实现

sort_values方法

Pandas的sort_values方法可以将数据集按照一列或多列进行排序,默认是按升序排列。常用语法如下:

data.sort_values("column_name", ascending=True)

其中”data”表示数据集,”column_name”表示按照哪一列排序,”ascending”表示排序方式。例如下面的代码按照”salary”列进行降序排序:

import pandas as pd

data = pd.read_csv("data.csv")
sorted_data = data.sort_values("salary", ascending=False)

多列排序

有时候需要按照多列对数据进行排序,在sort_values方法中传入多个列名即可:

data.sort_values(["column_name1", "column_name2"], ascending=[True, False])

其中”ascending=[True, False]”表示按照”column_name1″列升序排列,如果”column_name1″列值相同则按照”column_name2″列降序排列。例如下面的代码按照”salary”列和”age”列进行排序:

import pandas as pd

data = pd.read_csv("data.csv")
sorted_data = data.sort_values(["salary", "age"], ascending=[False, True])

示例

为了更好地说明Pandas分组与排序的实现,以下是一个示例代码,数据集包含了员工的姓名、性别、年龄、部门和薪水等信息:

import pandas as pd
import numpy as np

# 读取数据集
data = pd.read_csv("data.csv")

# 按“部门”列分组,获取每组的平均薪水和年龄
groups = data.groupby("department")
result = groups.agg({"salary": np.mean, "age": np.median})
print(result)

# 按“性别”和“部门”两列分组,获取每组的平均薪水和标准差
groups = data.groupby(["sex", "department"])
result = groups.agg({"salary": [np.mean, np.std]})
print(result)

# 按“薪水”列降序排序,获取最高薪水的前5位员工信息
sorted_data = data.sort_values("salary", ascending=False)
top_5 = sorted_data.head(5)
print(top_5)

以上代码中使用了groupbyagg方法对数据进行分组和聚合计算,使用了sort_values方法对数据进行排序。