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

如何在pandas中获取各列最后N个非NaN行的值并执行运算

解决方案

你可以直接对每列做逐列处理,先过滤掉空值再取最后N个值计算即可,示例代码如下:

import pandas as pd
import numpy as np

# 你的示例数据
df = pd.DataFrame({
    'a': [125384.0, 224996.0, 178755.0, 194345.0, 143193.0, np.nan],
    'b': [0.823381, 0.926270, 0.865229, 0.959907, np.nan, np.nan],
    'c': [614109.0, 522097.0, 482718.0, 473543.0, 450413.0, np.nan]
})

n = 3 # 要取的最后N个非空值数量
# 方案1:逐列处理,逻辑直观易理解
res = df.apply(lambda col: col.dropna().tail(n).mean())
print(res)

运行后输出结果符合你的预期:

a    172097.666667
b         0.917135
c    468891.333333
dtype: float64

大表优化方案

如果你的DataFrame数据量很大,apply逐列处理效率偏低,可以用向量化操作实现,性能提升明显:

n = 3
# 反转数据后对非空值计数,筛选出每列最后3个非空值的位置
mask = df.notna()[::-1].cumcount() < n
res = df[mask].mean()

之前代码报错的原因

iloc的行切片是全局生效的,无法针对每列单独设置不同的索引范围,你传入apply返回的多值索引序列不符合iloc的入参要求,因此触发类型错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:11