Pandas 数据排序与聚合技巧(十一)
- Python
- 9小时前
- 2热度
- 0评论
在数据分析领域,数据排序和聚合是非常基础且重要的操作。无论是处理小规模数据集还是大规模数据集,掌握这些技能都能显著提高工作效率。本文将详细介绍如何使用 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 500001.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: float642.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 的数据可视化功能,帮助你更好地理解和解释数据的模式、趋势和关系。希望本文对你在数据分析领域的学习和工作有所帮助。