【进阶篇】高级数据处理技巧:Pandas中的GroupBy与Apply
发布时间: 2024-06-24 19:54:23 阅读量: 75 订阅数: 117
![【进阶篇】高级数据处理技巧:Pandas中的GroupBy与Apply](https://img-blog.csdnimg.cn/f90645b6b5f244658a0a03804c10928a.png)
# 2.1 分组聚合函数
### 2.1.1 常用聚合函数
Pandas 提供了丰富的聚合函数,用于对分组数据进行聚合计算。常用聚合函数包括:
- `sum()`: 计算各组元素的总和
- `mean()`: 计算各组元素的平均值
- `median()`: 计算各组元素的中位数
- `max()`: 计算各组元素的最大值
- `min()`: 计算各组元素的最小值
**示例:**
```python
import pandas as pd
df = pd.DataFrame({
'group': ['A', 'A', 'B', 'B', 'C'],
'value': [1, 2, 3, 4, 5]
})
# 分组求和
df_sum = df.groupby('group')['value'].sum()
print(df_sum)
```
输出:
```
group
A 3
B 7
C 5
Name: value, dtype: int64
```
# 2. GroupBy分组操作
GroupBy分组操作是Pandas中用于对数据进行分组和聚合的强大工具。它允许用户根据一个或多个列将数据分组,并对每个组执行各种聚合操作,例如求和、求平均值或计数。
### 2.1 分组聚合函数
#### 2.1.1 常用聚合函数
Pandas提供了各种内置的聚合函数,用于对分组数据执行聚合操作。最常用的聚合函数包括:
- `sum()`:计算每个组中值的总和
- `mean()`:计算每个组中值的平均值
- `max()`:计算每个组中值的最小值
- `min()`:计算每个组中值的最小值
- `count()`:计算每个组中值的个数
**代码块:**
```python
import pandas as pd
df = pd.DataFrame({
"category": ["A", "B", "C", "A", "B", "C"],
"value": [10, 20, 30, 40, 50, 60]
})
# 对 "category" 列分组并计算每个组中 "value" 列的总和
result = df.groupby("category")["value"].sum()
print(result)
```
**逻辑分析:**
* `groupby("category")`:根据 "category" 列将数据分组,返回一个GroupBy对象。
* `["value"].sum()`:对每个组中的 "value" 列求和。
* `print(result)`:打印分组后的聚合结果。
#### 2.1.2 自定义聚合函数
除了内置的聚合函数,用户还可以自定义聚合函数来执行更复杂的聚合操作。自定义聚合函数需要实现 `__call__()` 方法,该方法接受一个分组后的数据帧并返回聚合结果。
**代码块:**
```python
def my_agg_func(group):
return group["value"].mean() + group["value"].std()
# 对 "category" 列分组并应用自定义聚合函数
result = df.groupby("category")["value"].agg(my_agg_func)
print(result)
```
**逻辑分析:**
* `my_agg_func(group)`:自定义聚合函数,计算每个组中 "value" 列的平均值和标准差之和。
* `agg(my_agg_func)`:应用自定义聚合函数对每个组进行聚合。
* `print(result)`:打印分组后的聚合结果。
### 2.2 分组排序和筛选
#### 2.2.1 按分组排序
GroupBy对象还支持对分组后的数据进行排序。可以使用 `sort_values()` 方法根据指定的列对分组后的数据进行升序或降序排序。
**代码块:**
```python
# 按 "category" 列分组并对每个组中的 "value" 列进行升序排序
result = df.groupby("category")["value"].sort_values()
print(result)
```
**逻辑分析:**
* `sort_values()`:对分组后的数据按 "value" 列进行升序排序。
* `print(result)`:打印排序后的分组数据。
#### 2.2.2 按分组筛选
GroupBy对象还支持对分组后的数据进行筛选。可以使用 `filter()` 方法根
0
0