Pandas2.2 DataFrame
Function application, GroupBy & window
方法 描述 DataFrame.apply(func[, axis, raw, …]) 用于沿 DataFrame 的轴(行或列)应用一个函数 DataFrame.map(func[, na_action]) 用于对 DataFrame 的每个元素应用一个函数 DataFrame.applymap(func[, na_action]) 用于对 DataFrame 中的每一个元素应用一个函数 DataFrame.pipe(func, *args, **kwargs) 用于实现链式编程风格的方法 DataFrame.agg([func, axis]) 用于对 DataFrame 的数据进行聚合操作 DataFrame.aggregate([func, axis]) 用于对 DataFrame 进行聚合操作 的方法 DataFrame.transform(func[, axis]) 用于对 DataFrame 的列或行应用函数 DataFrame.groupby([by, axis, level, …]) 用于进行分组操作 的核心方法
pandas.DataFrame.groupby()
pandas.DataFrame.groupby()
是 Pandas 中用于进行分组操作 的核心方法。它允许你根据一个或多个列的值将数据分成不同的组,然后对每个组应用聚合、转换或过滤等操作。
一、方法签名
DataFrame. groupby( by= None , axis= 0 , level= None , as_index= True , sort= True , group_keys= True , observed= < no_default> , dropna= True )
二、参数说明
参数 类型 描述 by
mapping, function, label, or list of labels 分组依据。可以是列名、函数(用于处理索引)、字典映射、Series 或列表(多列分组)。 axis
int or str, default: 0 沿哪个轴分组:0
表示按行分组(默认),1
表示按列分组。 level
int or str, optional 如果轴是 MultiIndex,则按指定层级分组。 as_index
bool, default: True 是否将分组键作为结果的索引(仅在聚合时有效)。 sort
bool, default: True 是否对分组键排序。 group_keys
bool, default: True 在使用 apply()
时是否添加分组键到结果中。 observed
bool, default: False 控制是否只显示观察到的类别(适用于分类变量分组)。 dropna
bool, default: True 是否排除包含 NaN
的分组键。
三、返回值
返回一个 GroupBy
对象,支持链式调用: .agg()
:聚合.transform()
:变换.filter()
:过滤.apply()
:自定义函数
四、常用场景及示例
示例1:单列分组 + 聚合(.agg()
)
import pandas as pddf = pd. DataFrame( { 'Category' : [ 'A' , 'B' , 'A' , 'B' ] , 'Sales' : [ 100 , 200 , 150 , 250 ]
} )
result = df. groupby( 'Category' ) . agg( { 'Sales' : 'sum' } )
print ( result)
输出:
Sales
Category
A 250
B 450
示例2:多列分组 + 多种聚合函数
df = pd. DataFrame( { 'Region' : [ 'North' , 'South' , 'North' , 'South' ] , 'Product' : [ 'X' , 'X' , 'Y' , 'Y' ] , 'Sales' : [ 100 , 150 , 200 , 250 ] , 'Units' : [ 10 , 15 , 20 , 25 ]
} )
result = df. groupby( [ 'Region' , 'Product' ] ) . agg( Total_Sales= ( 'Sales' , 'sum' ) , Avg_Units= ( 'Units' , 'mean' )
)
print ( result)
输出:
Total_Sales Avg_Units
Region Product
North X 100 10.0Y 200 20.0
South X 150 15.0Y 250 25.0
示例3:使用 .transform()
进行标准化
df[ 'Avg_Sales_By_Region' ] = df. groupby( 'Region' ) [ 'Sales' ] . transform( 'mean' )
print ( df)
输出:
Region Product Sales Units Avg_Sales_By_Region
0 North X 100 10 150.0
1 South X 150 15 200.0
2 North Y 200 20 150.0
3 South Y 250 25 200.0
示例4:使用 .filter()
筛选特定组
filtered_df = df. groupby( 'Region' ) . filter ( lambda x: x[ 'Sales' ] . sum ( ) > 300 )
print ( filtered_df)
输出:
Region Product Sales Units
1 South X 150 15
3 South Y 250 25
示例5:使用 .apply()
自定义操作
def normalize ( group) : group[ 'Norm_Sales' ] = group[ 'Sales' ] / group[ 'Sales' ] . sum ( ) return groupresult = df. groupby( 'Region' ) . apply ( normalize)
print ( result)
输出:
Region Product Sales Units Norm_Sales
0 North X 100 10 0.333333
2 North Y 200 20 0.666667
1 South X 150 15 0.375000
3 South Y 250 25 0.625000
五、注意事项
分组键类型 :支持字符串、整数、日期、分类变量等。性能优化 :对于大型数据集,建议关闭 group_keys
和 sort
提升效率。缺失值处理 :默认不包括含 NaN
的分组键,可通过 dropna=False
改变行为。as_index :若为 False
,则分组键不会成为索引,适合输出表格化结果。
六、总结
方法 用途 .agg()
对每个分组执行聚合操作(如 sum、mean) .transform()
对每个分组执行变换操作,返回与原数据相同长度的结果 .filter()
根据条件筛选符合条件的组 .apply()
对每个分组应用任意函数,灵活性最强
groupby()
是数据分析中最核心的操作之一,结合聚合、变换、过滤等功能,能实现复杂的数据分析任务。