如何在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
相关产品推荐
相关产品推荐

