You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中DataFrame的agg()与apply()方法有何区别?

pandas DataFrame.agg() 与 DataFrame.apply() 的区别解析

问题背景

已有不少讨论针对groupby对象的agg()和apply(),但仍不清楚**DataFrame原生的agg()与apply()**的差异,从下方测试代码看二者输出完全一致,同时想了解是否存在仅适用于行操作、不适用于列操作的特殊场景。

测试代码

import pandas as pd

a = pd.Series([True, False, False])
b = pd.Series([False, False, False])
c = pd.Series([True, True, False])
d = pd.Series([1, 2, 3])

print(pd.DataFrame({'a': a, 'b': b, 'c': c, 'd': d}).agg(lambda x: print(len(x)), axis=1))
print()
print(pd.DataFrame({'a': a, 'b': b, 'c': c, 'd': d}).apply(lambda x: print(len(x)), axis=1))

代码输出

4
4
4
0    None
1    None
2    None
dtype: object

4
4
4
0    None
1    None
2    None
dtype: object

核心区别解析

虽然在简单lambda场景下两者表现一致,但它们的设计定位和能力范围有本质不同:

  • 功能定位:

    • agg()是专门的聚合工具,主打多输入单输出的汇总计算(如求和、均值、计数),支持批量为不同列指定不同聚合逻辑;
    • apply()是通用数据转换工具,可处理任意自定义逻辑,不管是聚合、转换还是复杂逐行/列计算,灵活性拉满。
  • 批量操作能力:
    agg()支持字典、列表形式的参数,实现多函数/多列的批量聚合,这是apply()做不到的:

    df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
    # 按列指定不同聚合函数
    print(df.agg({'a': 'sum', 'b': 'mean'}))
    # 对所有列应用多个聚合函数
    print(df.agg(['sum', 'mean']))
    
  • 返回值与性能:

    • agg()会返回结构化的聚合结果(如多级索引),且调用内置聚合函数时性能更优;
    • apply()的返回值完全由自定义函数决定(标量、Series、DataFrame都可能),但因逐行/列执行逻辑,大数据集下速度更慢。

行操作的特殊场景

两者都支持axis=1(行操作)和axis=0(列操作),不存在仅适用于行操作的绝对特殊情况,但行操作时apply()的灵活性优势更突出:

  • agg()在行操作中更适合行内汇总(如求每行最大值、求和);
  • apply()可处理行内复杂逻辑,比如多列条件判断、字符串拼接等,写法更直观:
    df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6], 'c': [7,8,9]})
    # 行内条件判断
    result = df.apply(lambda x: "大于" if (x['a']+x['b'])>x['c'] else "小于等于", axis=1)
    print(result)
    

内容的提问来源于stack exchange,提问作者shortorian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:55:21