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
原因解析
DataFrame的apply():按轴批量处理
DataFrame是二维结构,apply()默认按**列(axis=0)**作为处理单元,会把每一列(一个Series对象)传入np.max()函数。np.max()接收Series时会计算该列的最大值,最终将所有列的最大值组合成新Series返回。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
相关产品推荐
相关产品推荐

