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

如何在Python中按列求和至最后一个非0/非NaN行

实现每列求和至最后一个非0、非NaN行的方法

完全可以用Python实现,以下是具体步骤和代码:

步骤1:创建有效数据掩码

先标记DataFrame中每个元素是否为非0且非NaN的有效数据:

mask = df.ne(0) & df.notna()

步骤2:获取每列最后一个有效行的索引

通过反转行顺序,找到每列最后一个有效数据的位置(原数据中的索引):

last_valid_idx = mask.iloc[::-1].idxmax(axis=0)

注:iloc[::-1]反转行顺序后,idxmax会找到反转后第一个有效数据的位置,也就是原数据中最后一个有效行的索引。如果某列全是0或NaN,idxmax会返回该列的第一个索引,后续求和时会处理这种情况。

步骤3:计算每列的目标求和值

遍历每列,计算从开头到最后有效行的求和:

col_sums = {}
for col in df.columns:
    idx = last_valid_idx[col]
    # 检查该列是否有有效数据,没有则返回0
    if not mask[col].any():
        col_sums[col] = 0
    else:
        col_sums[col] = df[col].loc[:idx].sum()

或者用更简洁的apply方式:

def sum_to_last_valid(col):
    valid = col.ne(0) & col.notna()
    if not valid.any():
        return 0
    last_idx = valid.iloc[::-1].idxmax()
    return col.loc[:last_idx].sum()

col_sums = df.apply(sum_to_last_valid)

示例验证

假设你的数据和图中一致,比如size1最后一个非0非NaN的行是第5行,size2是第3行,运行上述代码后,col_sums会返回每列对应区间的求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:52:15