groupby()
基本用法
- 分组:通过指定一个或多个列名作为键来对数据进行分组。
- 聚合:对每个分组应用聚合函数,如求和(
sum()
)、平均值(mean()
)、最大值(max()
)、最小值(min()
)等。 - 重置索引:分组操作会改变DataFrame的索引,通常你会想要使用
reset_index()
方法来重置索引,使其成为一个普通的列。
示例
单键分组
import pandas as pd
# 创建一个简单的DataFrame
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'A'],
'Values': [10, 20, 30, 40, 50]
})
# 根据'Category'列进行分组,并计算每个组的和
grouped = df.groupby('Category')['Values'].sum().reset_index()
print(grouped)
在这个例子中,数据被分为两组:‘A’ 和 ‘B’,然后计算了每个组的’Values’列的和。
多键分组
# 创建一个包含多个分类列的DataFrame
df_multi = pd.DataFrame({
'Category1': ['X', 'X', 'Y', 'Y'],
'Category2': ['A', 'B', 'A', 'B'],
'Values': [1, 2, 3, 4]
})
# 根据'Category1'和'Category2'列进行分组,并计算每个组的和
grouped_multi = df_multi.groupby(['Category1', 'Category2'])['Values'].sum().reset_index()
print(grouped_multi)
在这个例子中,数据被分为四组:(‘X’, ‘A’)、(‘X’, ‘B’)、(‘Y’, ‘A’) 和 (‘Y’, ‘B’),然后计算了每个组的’Values’列的和。
应用多个聚合函数
# 使用agg方法应用多个聚合函数
grouped_agg = df.groupby('Category')['Values'].agg(['sum', 'mean', 'max', 'min']).reset_index()
print(grouped_agg)
在这个例子中,对每个分组应用了四个聚合函数:求和、平均值、最大值和最小值。
转换和过滤
除了聚合之外,groupby()
还可以与 transform()
方法结合使用来进行数据转换,或者与 filter()
方法结合使用来过滤数据。
# 使用transform方法计算每个组的平均值,并将其作为新列添加到原始DataFrame中
df['Mean'] = df.groupby('Category')['Values'].transform('mean')
print(df)
在这个例子中,每个组的’Values’列的平均值被计算出来,并作为新列’Mean’添加到了原始DataFrame中。
注意事项
- 当使用
groupby()
时,确保你理解分组键和聚合函数如何影响你的数据。 - 聚合操作会改变数据的形状,通常会导致某些行或列的丢失。
- 如果你的DataFrame很大,
groupby()
操作可能会比较耗时,特别是在多键分组或应用复杂聚合函数时。在这种情况下,考虑优化你的代码或使用更高效的数据处理策略。