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)
:对数据进行聚合计算,可以传入多个聚合函数,如max
、min
、mean
、sum
等。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)
以上代码中使用了groupby
和agg
方法对数据进行分组和聚合计算,使用了sort_values
方法对数据进行排序。