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

Pandas中Series与DataFrame的apply()方法行为差异解析

Pandas中Series与DataFrame的apply()方法行为差异解析

你遇到的核心问题是Pandas里Series和DataFrame的apply()方法设计逻辑不同:

  • 对DataFrame调用apply(np.max)时,返回每列的最大值;
  • 对Series调用apply(np.max)时,却返回原Series,而非预期的整个Series的最大值。

复现代码及输出

import pandas as pd
import numpy as np   

my_df = pd.DataFrame(np.random.randint(10, size=(4,3)), columns = list('ABC'))
my_df

Output:

A   B   C
0   2   4   7
1   9   6   6
2   4   4   8
3   8   8   1
df_max = my_df.apply(np.max)
df_max

Output:

A    9
B    8
C    8
dtype: int32
se_max = my_df['A'].apply(np.max)
se_max

Output:

0    2
1    9
2    4
3    8
Name: A, dtype: int32

原因解析

  1. DataFrame的apply():按轴批量处理
    DataFrame是二维结构,apply()默认按**列(axis=0)**作为处理单元,会把每一列(一个Series对象)传入np.max()函数。np.max()接收Series时会计算该列的最大值,最终将所有列的最大值组合成新Series返回。

  2. Series的apply():逐元素处理
    Series是一维结构,apply()默认会把函数作用于每个单独元素。传入np.max时,它会把每个数值(比如2、9、4、8)分别传入np.max,而np.max处理单个数值时返回的就是数值本身,所以结果和原Series完全一致。

如何在Series上通过apply获取整体最大值

如果非要用apply()实现类似series.max()的效果,可以用lambda函数包裹,让函数作用于整个Series:

se_max = my_df['A'].apply(lambda _: np.max(my_df['A']))
# 更简洁的方式是直接调用Series的max方法
se_max = my_df['A'].max()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:22