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
       
点我分享笔记