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

使用lambda函数计算累积均值的代码相关技术疑问

问题解答

1. axis=1的作用及为何按行迭代用1而非0

在pandas的apply方法中,axis参数定义了函数要作用的维度:

  • axis=0:函数沿着行的方向作用,即对每一列的数据进行批量处理
  • axis=1:函数沿着列的方向作用,即对每一行的数据进行单独处理

你需要对每一行执行lambda逻辑,所以必须指定axis=1——此时lambda里的x会代表DataFrame中的单一行(Series对象)。如果误用axis=0,lambda会接收整列的数据,完全不符合你的需求。

2. 可以避免创建index列,直接使用原索引

完全没必要通过reset_index()生成额外的index列,原DataFrame本身就自带默认整数索引,直接用这个索引就能实现逻辑。而且你当前的apply写法效率极低,推荐用pandas内置的expanding方法计算累积均值,代码更简洁高效:

# 优化后的高效代码
res_df = pd.Series([2,10,3,1]).to_frame(name='val')
res_df['cum_mean'] = res_df['val'].expanding().mean()

如果要保留你原本的逻辑(不用expanding),也可以直接借助原索引实现:

res_df = pd.Series([2,10,3,1]).to_frame(name='val')
res_df['cum_mean'] = res_df.apply(lambda x: res_df.loc[:x.name, 'val'].mean(), axis=1)

这里x.name就是当前行的原索引值,用loc[:x.name]就能选取从开头到当前行的所有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:32:35