Pandas 数据排序与聚合 - PANDAS教程

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() 示例:

示例代码
importpandasaspd# 示例数据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)

输出:


      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() 示例 :

示例代码
importpandasaspd# 示例数据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)

输出:


              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(lambdax: 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)

输出:

Department

Finance    60000.0

HR         52500.0

IT         72500.0

Name: Salary, dtype: float64