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

在Pandas中计算每行最后n个非空列的行均值(无需硬编码列名)

Pandas实现每行最后2个非空列的均值计算

问题场景

现有如下Pandas DataFrame:

idjanfebmaraprmay
11030
21020505060
37050
43040

需要计算每行最后2个非空列的均值,新增average列,预期输出如下:

idjanfebmaraprmayaverage
1103020
2102050506055
3705060
4304035

由于实际列数较多,无法硬编码列名,需要用动态方法实现。


实现代码

1. 构造示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'id': [1,2,3,4],
    'jan': [10,10,np.nan,np.nan],
    'feb': [30,20,np.nan,30],
    'mar': [np.nan,50,np.nan,40],
    'apr': [np.nan,50,70,np.nan],
    'may': [np.nan,60,50,np.nan]
})

2. 动态计算每行最后2个非空值的均值

# 动态获取所有数值列(排除id列)
num_columns = df.columns.drop('id')

# 定义行处理函数:提取最后两个非空值并计算均值
def calc_last_two_mean(row):
    non_null_values = row.dropna().values
    # 取最后2个非空值,不足2个则取全部
    target_values = non_null_values[-2:] if len(non_null_values) >= 2 else non_null_values
    return target_values.mean()

# 应用函数到每行,生成average列
df['average'] = df[num_columns].apply(calc_last_two_mean, axis=1)

# 输出结果
print(df)

代码说明

  • df.columns.drop('id'):无需硬编码列名,自动获取除id外的所有列,适配任意数量的数值列。
  • apply(..., axis=1):按行遍历处理数据,确保每行单独计算。
  • row.dropna():移除当前行的空值,再通过索引[-2:]取最后两个有效数值,兼容非空值不足2个的边界场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:32:08