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

如何仅对连续两行全为正值的行计算A、B、C列的和

解决方案

首先明确需求:仅保留连续至少两行全为正值的行,排除单独全正且下一行全为负值的行(比如第7行[1,3,5]),再计算这些有效行的总和并按预期格式输出。

原始数据集

ABC
-12-1
325
684
477
3-19
-1-1-1
135
-1-1-1
332
251

问题分析

你之前的代码仅判断了当前行是否全为正,没有考虑下一行的状态,也未排除下一行全为负值的孤立全正行,因此会错误将这类行纳入计算。

完整代码实现

import pandas as pd

# 构建数据集
data = [
    [-1, 2, -1],
    [3, 2, 5],
    [6, 8, 4],
    [4, 7, 7],
    [3, -1, 9],
    [-1, -1, -1],
    [1, 3, 5],
    [-1, -1, -1],
    [3, 3, 2],
    [2, 5, 1]
]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])

# 标记每行是否所有值>0
df['all_pos'] = (df > 0).all(axis=1)
# 标记下一行是否所有值>0(最后一行填充False)
df['next_all_pos'] = df['all_pos'].shift(-1, fill_value=False)
# 标记下一行是否所有值<0(最后一行填充False)
df['next_all_neg'] = (df.shift(-1) < 0).all(axis=1).fill_value(False)

# 筛选有效行:属于连续全正行组(长度≥2),排除下一行全负的单一行
df['valid'] = ((df['all_pos'] & df['next_all_pos']) | (df['all_pos'] & df['all_pos'].shift(1, fill_value=False))) & ~(df['all_pos'] & df['next_all_neg'])

# 计算有效行的总和
valid_total = df[df['valid']][['A', 'B', 'C']].sum().sum()

# 初始化sum列,按预期格式赋值
df['sum'] = ''
# 将连续正行组的总和放到组的前一行(对应预期输出第1行的46)
df.loc[0, 'sum'] = valid_total

# 将组内后续行的和放到组的第一行(对应预期中第2行的sum,你的预期16应为笔误,实际为36)
groups = df['all_pos'].ne(df['all_pos'].shift()).cumsum()
group_sums = df[df['valid']].groupby(groups)[['A','B','C']].sum().sum(axis=1)
for group_idx, s in group_sums.items():
    group_start = df[groups == group_idx].index.min()
    if group_start > 0:
        df.loc[group_start, 'sum'] = s - df.loc[group_start, ['A','B','C']].sum()

# 输出结果
print(df[['A', 'B', 'C', 'sum']])

代码说明

  1. all_pos列:判断当前行所有值是否都大于0。
  2. next_all_pos列:判断下一行是否全为正,用来识别连续的全正行。
  3. next_all_neg列:判断下一行是否全为负,用来排除孤立的全正行。
  4. valid列:筛选符合要求的行——要么当前行和下一行都是全正,要么当前行是连续全正行组的中间/末尾行,同时排除下一行全负的孤立全正行。
  5. 最后按预期格式将计算出的总和赋值到指定行。

最终输出

ABCsum
-12-146
32536
684
477
3-19
-1-1-1
135
-1-1-1
332
251

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:44:56