Pandas 数据排序与聚合
数据排序与聚合是数据分析中非常常见且重要的操作,特别是在大数据集中的数据分析时。
排序帮助我们按特定标准对数据进行排列,而聚合则让我们对数据进行汇总,计算出各种统计量。
Pandas 提供了强大的排序和聚合功能,能够帮助分析人员高效地处理数据。
操作 | 方法 | 说明 | 常用函数/方法 |
---|---|---|---|
排序 | sort_values(by, ascending) |
根据某列的值进行排序,ascending 控制升降序 |
df.sort_values(by='column') |
排序 | sort_index(axis) |
根据行或列的索引进行排序 | df.sort_index(axis=0) |
分组聚合 | groupby(by) |
按照某列进行分组后,应用聚合函数 | df.groupby('column') |
聚合函数 | agg() |
聚合函数,如 sum() 、mean() 、count() 等 |
df.groupby('column').agg({'value': 'sum'}) |
多重聚合 | agg([func1, func2]) |
对同一列应用多个聚合函数 | df.groupby('column').agg({'value': ['mean', 'sum']}) |
分组后排序 | apply(lambda x: x.sort_values(...)) |
在分组后进行排序 | df.groupby('column').apply(lambda x: x.sort_values(...)) |
透视表 | pivot_table() |
创建透视表,根据行、列进行数据汇总 |
一、数据排序(Sorting)
排序是指将数据按某个列的值进行升序或降序排列。Pandas 提供了两种主要的方法来进行排序:sort_values()
和 sort_index()
。
排序方法
sort_values()
:根据列的值进行排序。sort_index()
:根据行或列的索引进行排序。
实例
操作 | 方法 | 说明 | 示例 |
---|---|---|---|
按值排序 | df.sort_values(by, ascending) |
按照指定的列(by )排序,ascending 控制升序或降序,默认为升序 |
df.sort_values(by='Age', ascending=False) |
按索引排序 | df.sort_index(axis) |
按照行或列的索引排序,axis 控制按行或列排序 |
df.sort_index(axis=0) |
sort_values()
示例:
实例
import pandas as pd
# 示例数据
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)
# 按照 "Age" 列的值进行降序排序
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)
# 示例数据
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)
# 按照 "Age" 列的值进行降序排序
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)
输出:
Name Age Salary 3 David 40 80000 2 Charlie 35 70000 1 Bob 30 60000 0 Alice 25 50000
sort_index()
示例:
实例
# 按照行索引进行排序
df_sorted_by_index = df.sort_index(axis=0)
print(df_sorted_by_index)
df_sorted_by_index = df.sort_index(axis=0)
print(df_sorted_by_index)
输出:
Name Age Salary 0 Alice 25 50000 1 Bob 30 60000 2 Charlie 35 70000 3 David 40 80000
二、数据聚合(Aggregation)
聚合是将数据按某些规则进行汇总,通常是对某些列的数据进行求和、求平均数、求最大值、求最小值等操作。Pandas 提供了groupby()
方法来对数据进行分组,然后应用不同的聚合函数。
聚合方法
groupby()
:按某些列分组。- 聚合函数:如
sum()
,mean()
,count()
,min()
,max()
,std()
等。
实例
操作 | 方法 | 说明 | 示例 |
---|---|---|---|
按列分组并聚合 | df.groupby(by).agg() |
按指定列(by )进行分组,agg() 可以传入不同的聚合函数,进行多种操作 |
df.groupby('Department').agg({'Salary': 'mean'}) |
多重聚合函数应用 | df.groupby(by).agg([func1, func2]) |
可以对同一列应用多个聚合函数,返回多种聚合结果 | df.groupby('Department').agg({'Salary': ['mean', 'sum']}) |
groupby()
示例:
实例
import pandas as pd
# 示例数据
data = {'Department': ['HR', 'Finance', 'HR', 'IT', 'IT'],
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Salary': [50000, 60000, 55000, 70000, 75000]}
df = pd.DataFrame(data)
# 按照部门分组,并计算每个部门的平均薪资
grouped = df.groupby('Department')['Salary'].mean()
print(grouped)
# 示例数据
data = {'Department': ['HR', 'Finance', 'HR', 'IT', 'IT'],
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Salary': [50000, 60000, 55000, 70000, 75000]}
df = pd.DataFrame(data)
# 按照部门分组,并计算每个部门的平均薪资
grouped = df.groupby('Department')['Salary'].mean()
print(grouped)
输出:
Department Finance 60000.0 HR 52500.0 IT 72500.0 Name: Salary, dtype: float64
多重聚合函数应用:
实例
# 按照部门分组,并计算每个部门的薪资的平均值和总和
grouped_multiple = df.groupby('Department').agg({'Salary': ['mean', 'sum']})
print(grouped_multiple)
grouped_multiple = df.groupby('Department').agg({'Salary': ['mean', 'sum']})
print(grouped_multiple)
输出:
Salary mean sum Department Finance 60000.0 60000 HR 52500.0 105000 IT 72500.0 145000
三、分组后的排序
聚合后的数据可以进一步按某列的值进行排序,这样可以找出特定组中最重要的值。
分组后排序
操作 | 方法 | 说明 | 示例 |
---|---|---|---|
分组后排序 | df.groupby(by).apply(lambda x: x.sort_values(by='col')) |
在每个分组内部按照某列的值进行排序。 | df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False)) |
分组后排序示例:
实例
# 按照部门分组后,按薪资降序排序
grouped_sorted = df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False))
print(grouped_sorted)
grouped_sorted = df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False))
print(grouped_sorted)
输出:
Department Employee Salary Department Finance Bob 60000 HR Charlie 55000 HR Alice 50000 IT Eve 75000 IT David 70000
四、透视表
透视表(Pivot Table)是一个特殊的聚合方式,可以让我们通过行、列和聚合函数对数据进行快速汇总,类似于 Excel 中的透视表。
实例
操作 | 方法 | 说明 | 示例 |
---|---|---|---|
创建透视表 | df.pivot_table(values, index, columns, aggfunc) |
用指定的列进行行、列分类汇总,values 是需要聚合的值,aggfunc 是聚合函数 |
df.pivot_table(values='Salary', index='Department', aggfunc='mean') |
透视表示例:
实例
# 使用 pivot_table 计算每个部门的薪资平均值
pivot_table = df.pivot_table(values='Salary', index='Department', aggfunc='mean')
print(pivot_table)
pivot_table = df.pivot_table(values='Salary', index='Department', aggfunc='mean')
print(pivot_table)
输出:
Department Finance 60000.0 HR 52500.0 IT 72500.0 Name: Salary, dtype: float64