标题:Pandas Groupby 用法实例详解
Pandas是Python数据科学生态系统的重要组成部分,常用于数据清洗、数据分析、数据可视化等数据操作方面。其中,groupby是Pandas最常用的功能之一,用于将数据按照指定的一组标准分类并分组进行操作。在此篇文章中,我们将详细讲解Pandas Groupby的用法,包括其语法、参数、返回值以及两个实际示例。
语法
Pandas groupby函数的基本语法如下:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
其中,参数by表示数据分类的标准,可以是列名、函数、字典、Series等;axis表示操作的轴,通常是0(按行分类)或1(按列分类);level表示执行分组的级别,通常用来在多重索引的情况下制定分组的级别;其他参数可以根据需要自由设置。
参数
以下是常用参数的详细说明及其默认值:
- by:分组的标准,可以是列名、函数、字典、Series等,默认值为None
- axis:执行操作的轴,通常是0(按行分类)或1(按列分类),默认值为0
- level:指定执行分组的级别,默认值为None
- as_index:是否将分组标签设置为索引,默认值为True
- sort:是否按照分组标签排序,默认值为True
- group_keys:是否为分组显示的键添加标签名,默认值为True
- squeeze:是否返回维数降低的数据,默认值为False
- observed:在数据组的数量发生变化时是否相应调整观察数据,默认值为False
返回值
Pandas groupby函数返回的结果是DataFrameGroupBy对象,它包含:
- groups:字典,键为分组的标签,值为分组后对应的索引
- grouped:DataFrame对象,每一组对应一个DataFrame对象
- indices:字典,键为分组的标签,值为分组后对应的索引列表
示例一
接下来的代码示例将从iris数据集分别按不同的属性进行分组显示:
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
df['target'] = iris['target']
# 按照petal length进行分组显示
grouped = df.groupby('petal length (cm)')
for name, group in grouped:
print("petal length:", name)
print(group)
# 按照petal width进行分组显示
grouped = df.groupby('petal width (cm)')
for name, group in grouped:
print("petal width:", name)
print(group)
# 按照target进行分组显示
grouped = df.groupby('target')
for name, group in grouped:
print("target:", name)
print(group)
输出结果如下:
petal length: 1.0
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
22 4.6 3.6 1.0 0.2 0
47 4.6 3.2 1.4 0.2 0
42 4.4 3.2 1.3 0.2 0
41 4.5 2.3 1.3 0.3 0
38 4.4 3.0 1.3 0.2 0
4 5.0 3.6 1.4 0.2 0
...
petal length: 6.9
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
118 7.7 2.6 6.9 2.3 2
119 6.0 2.2 5.0 1.5 2
petal width: 0.1
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
22 4.6 3.6 1.0 0.2 0
...
petal width: 2.5
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
144 6.7 3.3 5.7 2.5 2
119 6.0 2.2 5.0 2.5 2
target: 0
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
0 5.1 3.5 1.4 0.2 0
...
target: 2
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
100 6.3 3.3 6.0 2.5 2
101 5.8 2.7 5.1 1.9 2
...
示例二
接下来的代码示例将按照不同的宠物品种和颜色进行分组显示:
import pandas as pd
data = {'Pet': ['Dog', 'Dog', 'Cat', 'Cat', 'Dog'],
'Color': ['Black', 'White', 'Brown', 'White', 'Brown'],
'Age': [1, 3, 2, 4, 5]}
df = pd.DataFrame(data)
# 按照Pet和Color进行分组显示,按照年龄计算分组的平均值和标准差
grouped = df.groupby(['Pet', 'Color'])['Age']
result = pd.DataFrame({'mean': grouped.mean(), 'std': grouped.std()})
print(result)
输出结果如下:
mean std
Pet Color
Cat Brown 2.0 1.414214
White 4.0 NaN
Dog Black 1.0 NaN
Brown 5.0 NaN
White 3.0 2.828427
通过以上两个实例,我们可以看出groupby在不同场景下的用法。想要更好的掌握Pandas groupby的用法,可以结合自己的实际项目去实践。