1. 基本概念与工作原理
groupby
操作分为三个步骤:
- 拆分(Splitting):根据标准将数据分为不同的组。
- 应用(Applying):对每个组应用函数。
- 合并(Combining):将函数的结果合并为一个新的数据结构。
2. 基本用法
按单列分组:
grouped = df.groupby('A')['C'].sum()
按多列分组:
grouped = df.groupby(['A', 'B'])['C'].sum()
3. 聚合操作
单一聚合函数:
- 常见聚合函数:
sum()
、mean()
、count()
、min()
、max()
grouped = df.groupby('A').mean()
按列
'A'
进行分组,然后对每个组的其他列计算均值多种聚合函数:
- 对同一列应用多种聚合函数:
grouped = df.groupby('A')['C'].agg(['sum', 'mean', 'count'])
对列
'C'
在分组后应用了sum
、mean
和count
三个聚合函数
- 对不同列应用不同聚合函数:
grouped = df.groupby('A').agg({'C': 'sum', 'D': 'mean'})
这里对
'C'
列应用了sum
函数,对'D'
列应用了mean
函数。最终的结果是一个包含了各列聚合结果的 DataFrame。
4. 过滤操作
对分组后的数据进行过滤:
filtered = df.groupby('A').filter(lambda x: len(x) >= 3)
5. 变换(Transformation)
返回与原始数据形状相同的对象:
transformed = df.groupby('A')['C'].transform(lambda x: x - x.mean())
6. 应用自定义函数
对分组数据应用自定义函数:
def custom_func(x): return x['C'].std() result = df.groupby('A').apply(custom_func)
7. 分组键的使用
分组键作为索引:
grouped = df.groupby('A', as_index=True)['C'].sum()
分组键不作为索引:
grouped = df.groupby('A', as_index=False)['C'].sum()
使用字典或 Series 进行分组:
mapping = {'foo': 'group1', 'bar': 'group2'} grouped = df.groupby(mapping)['C'].sum()
8. 分组后的对象属性
groups
: 返回分组信息。size()
: 返回每个组的大小。get_group(name)
: 返回特定组的数据。grouped = df.groupby('A') print(grouped.groups) print(grouped.size()) print(grouped.get_group('foo'))
9. 复杂分组与操作
分组后排序:
sorted_group = df.groupby('A')['C'].sum().sort_values(ascending=False)
使用
ngroup
编号组:df['group_num'] = df.groupby('A').ngroup()
10. 分层索引与重设索引
重设索引:
grouped = df.groupby(['A', 'B']).sum() reset_grouped = grouped.reset_index()
11. 性能优化建议
- 减少分组操作次数:合并多个操作到一次分组中完成。
- 使用
categorical
数据类型:对于有限的分类数据,转换为category
类型以提高效率。df['A'] = df['A'].astype('category')
12. 实践中的案例
销售数据的汇总:
sales_summary = df_sales.groupby(['Product', 'Region'])['Sales'].sum()
人口数据的统计:
age_summary = df_population.groupby(['Country', 'Gender'])['Age'].mean()
Python基础_Pandas_groupby用法
最新推荐文章于 2024-09-04 23:56:31 发布