Pandas 数据排序与聚合技巧(十一)

在数据分析领域,数据排序和聚合是非常基础且重要的操作。无论是处理小规模数据集还是大规模数据集,掌握这些技能都能显著提高工作效率。本文将详细介绍如何使用 Pandas 进行数据排序、聚合、分组后排序以及创建透视表,并提供丰富的示例代码,帮助你更好地理解和应用这些技术。

一、数据排序

数据排序是指将数据按某个特定标准进行排列,常见的排序方式包括按值排序和按索引排序。Pandas 提供了强大的排序功能,使数据处理变得更加高效。

1.1 按值排序

按值排序是指根据某一列的值对数据进行升序或降序排列。Pandas 的 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)

# 按年龄降序排序
df_sorted_by_age = df.sort_values(by='Age', ascending=False)
print(df_sorted_by_age)

输出结果

     Name  Age  Salary
3   David   40   80000
2  Charlie   35   70000
1     Bob   30   60000
0   Alice   25   50000

1.2 按索引排序

按索引排序是指根据行或列的索引进行排序。Pandas 的 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

二、数据聚合

数据聚合是指将数据按某些规则进行汇总,通常是对某些列的数据进行求和、求平均数、求最大值、求最小值等操作。Pandas 提供了 groupby() 方法来对数据进行分组,然后应用不同的聚合函数。

2.1 按列分组并聚合

groupby() 方法可以按某一列或多列进行分组,然后应用聚合函数对分组后的数据进行汇总。

示例代码

# 创建示例数据
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

2.2 多重聚合函数应用

可以在同一列上应用多个聚合函数,返回多种聚合结果。

示例代码

# 按部门分组,计算平均工资和总工资
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

三、分组后的排序

聚合后的数据可以进一步按某列的值进行排序,这样可以找出特定组中最重要的值。

3.1 分组后排序

在每个分组内部按照某列的值进行排序。

示例代码

# 按部门分组,按工资降序排序
grouped_sorted = df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False))
print(grouped_sorted)

输出结果

           Department Employee  Salary
Department                              
Finance     1      Finance     Bob   60000
HR          2          HR  Charlie  55000
HR          0          HR    Alice  50000
IT          4           IT     Eve  75000
IT          3           IT   David  70000

四、透视表

透视表是一种特殊的聚合方式,可以让我们通过行、列和聚合函数对数据进行快速汇总,类似于 Excel 中的透视表。

4.1 创建透视表

使用 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

五、数据可视化

数据可视化是数据分析中的重要环节,它帮助我们更好地理解和解释数据的模式、趋势和关系。Pandas 提供了与 Matplotlib 和 Seaborn 等可视化库的集成,使得数据的可视化变得简单而高效。

5.1 Pandas 数据可视化概述

Pandas 的 plot() 方法可以轻松地绘制不同类型的图表,包括折线图、柱状图、直方图、散点图等。plot() 方法有很多参数,可以定制图表的样式、颜色、标签等。

5.2 常用图表类型

图表类型描述常用用法
折线图用于显示随时间变化的数据趋势df.plot(kind='line')
柱状图用于显示类别之间的比较数据df.plot(kind='bar')
水平柱状图与柱状图类似,但柱子是水平的df.plot(kind='barh')
直方图用于显示数据的分布(频率分布)df.plot(kind='hist')
散点图用于显示两个数值变量之间的关系df.plot(kind='scatter', x='col1', y='col2')
箱线图用于显示数据的分布、异常值及四分位数df.plot(kind='box')
密度图用于显示数据的密度分布df.plot(kind='kde')
饼图用于显示各部分占总体的比例df.plot(kind='pie')
区域图用于显示累计数值的图表(类似于折线图,但填充了颜色)df.plot(kind='area')

5.3 数据可视化示例

5.3.1 折线图 (Line Plot)

折线图通常用于展示数据随时间的变化趋势。

import pandas as pd
import matplotlib.pyplot as plt

# 创建示例数据
data = {
    'Year': [2018, 2019, 2020, 2021, 2022],
    'Sales': [100, 150, 200, 250, 300]
}

df = pd.DataFrame(data)

# 绘制折线图
df.plot(kind='line', x='Year', y='Sales', title='Sales Trend', xlabel='Year', ylabel='Sales', figsize=(8, 5))
plt.show()

5.3.2 柱状图 (Bar Chart)

柱状图用于展示不同类别之间的比较,尤其适用于离散数据。

# 创建示例数据
data = {
    'Category': ['A', 'B', 'C', 'D'],
    'Value': [10, 15, 7, 12]
}

df = pd.DataFrame(data)

# 绘制柱状图
df.plot(kind='bar', x='Category', y='Value', title='Category Values', xlabel='Category', ylabel='Value', figsize=(8, 5))
plt.show()

5.3.3 散点图 (Scatter Plot)

散点图用于展示两个数值变量之间的关系。

# 创建示例数据
data = {
    'Height': [150, 160, 170, 180, 190],
    'Weight': [50, 60, 70, 80, 90]
}

df = pd.DataFrame(data)

# 绘制散点图
df.plot(kind='scatter', x='Height', y='Weight', title='Height vs Weight', xlabel='Height (cm)', ylabel='Weight (kg)', figsize=(8, 5))
plt.show()

5.3.4 直方图 (Histogram)

直方图用于显示数据的分布,特别是用于描述数据的频率分布。

# 创建示例数据
data = {
    'Scores': [55, 70, 85, 90, 60, 75, 80, 95, 100, 65]
}

df = pd.DataFrame(data)

# 绘制直方图
df.plot(kind='hist', y='Scores', bins=5, title='Scores Distribution', xlabel='Scores', figsize=(8, 5))
plt.show()

5.3.5 箱线图 (Box Plot)

箱线图用于展示数据的分布情况,包括中位数、四分位数以及异常值。

# 绘制箱线图
df.plot(kind='box', title='Scores Boxplot', ylabel='Scores', figsize=(8, 5))
plt.show()

5.3.6 饼图 (Pie Chart)

饼图用于展示各部分占总体的比例。

# 绘制饼图
df.plot(kind='pie', y='Value', labels=df['Category'], autopct='%1.1f%%', title='Category Proportions', figsize=(8, 5))
plt.show()

六、总结

本文详细介绍了如何使用 Pandas 进行数据排序、聚合、分组后排序以及创建透视表,并提供了丰富的示例代码。通过这些操作,你可以更高效地处理和分析数据。此外,我们还介绍了 Pandas 的数据可视化功能,帮助你更好地理解和解释数据的模式、趋势和关系。希望本文对你在数据分析领域的学习和工作有所帮助。