groupby的深层次运用
时间: 2023-08-25 20:07:40 浏览: 40
`groupby` 是 pandas 中非常有用的函数,它可以将数据按照某些标准进行分组,并对每个分组进行操作。除了基本的分组操作之外,`groupby` 也支持一些深层次的运用,下面介绍一下其中的几个。
1. 聚合多个函数
`groupby` 可以使用 `agg` 方法聚合多个函数。例如,我们可以对一个数据集按照性别进行分组,然后计算每个分组的平均年龄和身高:
```python
import pandas as pd
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella', 'Frank'],
'gender': ['F', 'M', 'M', 'M', 'F', 'M'],
'age': [25, 30, 35, 40, 45, 50],
'height': [165, 170, 175, 180, 165, 175]
})
grouped = data.groupby('gender').agg({'age': 'mean', 'height': 'mean'})
print(grouped)
```
输出结果:
```
age height
gender
F 35.000000 165.0
M 38.333333 175.0
```
2. 对分组后的数据进行排序
`groupby` 后的数据可以使用 `sort_values` 方法排序。例如,我们可以对一个数据集按照性别进行分组,然后按照年龄和身高进行排序:
```python
import pandas as pd
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella', 'Frank'],
'gender': ['F', 'M', 'M', 'M', 'F', 'M'],
'age': [25, 30, 35, 40, 45, 50],
'height': [165, 170, 175, 180, 165, 175]
})
grouped = data.groupby('gender').apply(lambda x: x.sort_values(['age', 'height']))
print(grouped)
```
输出结果:
```
name gender age height
gender
F 0 Alice F 25 165
4 Ella F 45 165
M 1 Bob M 30 170
2 Charlie M 35 175
3 David M 40 180
5 Frank M 50 175
```
3. 使用 `transform` 方法进行数据变换
`groupby` 后的数据可以使用 `transform` 方法进行数据变换。例如,我们可以对一个数据集按照性别进行分组,然后计算每个分组的平均年龄和身高,并将每个人的年龄减去对应分组的平均年龄:
```python
import pandas as pd
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella', 'Frank'],
'gender': ['F', 'M', 'M', 'M', 'F', 'M'],
'age': [25, 30, 35, 40, 45, 50],
'height': [165, 170, 175, 180, 165, 175]
})
grouped = data.groupby('gender').agg({'age': 'mean', 'height': 'mean'})
data['age_diff'] = data['age'] - data['gender'].map(grouped['age'])
print(data)
```
输出结果:
```
name gender age height age_diff
0 Alice F 25 165 -10.0
1 Bob M 30 170 -8.333333
2 Charlie M 35 175 -3.333333
3 David M 40 180 1.666667
4 Ella F 45 165 10.000000
5 Frank M 50 175 8.333333
```
4. 按照多个键进行分组
`groupby` 可以按照多个键进行分组。例如,我们可以对一个数据集按照性别和身高进行分组,然后计算每个分组的平均年龄:
```python
import pandas as pd
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella', 'Frank'],
'gender': ['F', 'M', 'M', 'M', 'F', 'M'],
'age': [25, 30, 35, 40, 45, 50],
'height': [165, 170, 175, 180, 165, 175]
})
grouped = data.groupby(['gender', 'height']).agg({'age': 'mean'})
print(grouped)
```
输出结果:
```
age
gender height
F 165 25
M 170 30
175 42.5
180 40
```