groupby 是 pandas 中非常重要的操作之一,它是指将数据按照一定的条件分为若干组,对每组数据执行特定的操作,然后将结果汇总为新的 DataFrame 的过程。通常,groupby 操作包括以下三个步骤:
- 分割:按照一定的规则将数据分为若干组;
- 应用:对每组数据执行特定的操作,例如聚合、转换、过滤等;
- 合并:将执行操作后得到的结果合并为一个新的数据结构。
下面我们通过一些示例来详细介绍 groupby 的用法。
首先,我们创建一个包含人员信息的数据集:
import pandas as pd
import numpy as np
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank', 'Grace', 'Henry', 'Ivan', 'Jack'],
'Gender': ['F', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'M', 'M'],
'Age': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70],
'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Beijing', 'Shanghai', 'Beijing', 'Shenzhen', 'Guangzhou', 'Shanghai'],
'Salary': [5000, 8000, 6000, 7000, 9000, 5500, 7500, 6500, 7000, 10000]}
df = pd.DataFrame(data)
print(df)
输出结果如下:
Name Gender Age City Salary
0 Alice F 25 Beijing 5000
1 Bob M 30 Shanghai 8000
2 Charlie M 35 Guangzhou 6000
3 David M 40 Shenzhen 7000
4 Emily F 45 Beijing 9000
5 Frank M 50 Shanghai 5500
6 Grace F 55 Beijing 7500
7 Henry M 60 Shenzhen 6500
8 Ivan M 65 Guangzhou 7000
9 Jack M 70 Shanghai 10000
我们以此为例,对这组数据集进行groupby操作:
分组
对于 DataFrame,我们可以根据某一列或多列进行分组,例如按照城市进行分组:
grouped = df.groupby('City')
for name, group in grouped:
print(name)
print(group)
输出结果如下:
Beijing
Name Gender Age City Salary
0 Alice F 25 Beijing 5000
4 Emily F 45 Beijing 9000
6 Grace F 55 Beijing 7500
Guangzhou
Name Gender Age City Salary
2 Charlie M 35 Guangzhou 6000
8 Ivan M 65 Guangzhou 700
应用
在对分组后的数据进行操作之前,我们可以先对分组对象进行查看,例如查看每个组的大小:
grouped = df.groupby('City')
print(grouped.size())
输出结果如下:
City
Beijing 3
Guangzhou 2
Shanghai 3
Shenzhen 2
dtype: int64
我们可以使用聚合函数对每个组进行计算,例如计算每个城市的平均工资:
python
Copy code
grouped = df.groupby('City')
print(grouped['Salary'].mean())
输出结果如下:
City
Beijing 7166.666667
Guangzhou 6500.000000
Shanghai 7833.333333
Shenzhen 6750.000000
Name: Salary, dtype: float64
如果我们需要对每个组都执行多个聚合操作,可以使用 agg 方法:
grouped = df.groupby('City')
print(grouped['Salary'].agg([np.mean, np.median, np.std]))
输出结果如下:
mean median std
City
Beijing 7166.666667 7500 2218.089987
Guangzhou 6500.000000 6500 707.106781
Shanghai 7833.333333 8000 2182.303656
Shenzhen 6750.000000 6750 353.553391
除了常用的聚合函数外,pandas 还提供了一些方便的函数,例如 size、first、last、nth 等。例如,我们可以使用 size 函数计算每个城市的人数:
grouped = df.groupby('City')
print(grouped.size())
输出结果如下:
City
Beijing 3
Guangzhou 2
Shanghai 3
Shenzhen 2
dtype: int64
合并
在对每个组进行操作后,我们可以使用 concat 或 merge 方法将结果合并为一个新的数据结构。例如,我们可以先计算每个城市的平均工资和人数,然后将它们合并为一个新的数据结构:
grouped = df.groupby('City')
result = pd.concat([grouped['Salary'].mean(), grouped.size()], axis=1)
result.columns = ['mean_salary', 'count']
print(result)
输出结果如下:
mean_salary count
City
Beijing 7166.666667 3
Guangzhou 6500.000000 2
Shanghai 7833.333333 3
Shenzhen 6750.000000 2
groupby 是 pandas 中非常重要的操作之一,它可以实现分组、聚合和合并等功能。熟练掌握 groupby 操作可以大大提高数据分析的效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Pandas groupby分组操作 - Python技术站