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

Python/Pandas实现二维df各列连续正数计数并追加结果行

Pandas 逐列统计末尾连续正数个数并追加计数行的实现方案

核心计数逻辑

严格遵循题目给定规则:从列头开始逐行遍历,维护当前连续正数计数器:

  • 遇到值>0的元素:计数器加1
  • 遇到值≤0(即非正数):计数器重置为0
  • 遍历完整列后,计数器的最终值即为该列需要统计的连续正数个数,等价于从列尾向前数、直到碰到第一个非正数为止的正数长度。

分步实现代码

  1. 先构造题目对应的示例DataFrame
import pandas as pd

# 构造示例数据
df = pd.DataFrame(
    {"x": [1.0, -2.0, 3.0, 2.1], "y": [-1.0, 2.0, -3.0, 4.0]},
    index=["a", "b", "c", "d"]
)
  1. 定义逐列的计数计算函数,采用向量化逻辑避免逐元素循环,适配大数据量场景
def calc_trailing_positive_count(series):
    # 标记所有非正数的位置
    non_pos_flag = series <= 0
    # 获取最后一个非正数在列中的位置
    non_pos_positions = series.index[non_pos_flag]
    if len(non_pos_positions) == 0:
        # 全列都是正数的情况
        last_non_pos_pos = -1
    else:
        last_non_pos_pos = series.index.get_loc(non_pos_positions[-1])
    # 计算最终计数,转换为整数类型对齐示例输出
    return int(len(series) - (last_non_pos_pos + 1))
  1. 逐列计算计数结果,整理为新行格式
# 逐列应用计数函数,得到Series格式的计数结果
count_result = df.apply(calc_trailing_positive_count, axis=0)
# 设置新行的索引名称为Count,和示例输出对齐
count_result.name = "Count"
  1. 将计数行追加到原DataFrame末尾,得到最终结果
final_df = pd.concat([df, count_result.to_frame().T])

输出验证

执行上述代码后,最终final_df的内容和题目给出的示例完全一致:

x    y
a       1.0 -1.0
b      -2.0  2.0
c       3.0 -3.0
d       2.1  4.0
Count   2    1

边界场景适配

  • 若列最后一个元素为非正数,最终计数为0,符合规则
  • 若列全为正数,最终计数为列的总长度,符合规则
  • 严格将0判定为非正数,触发计数重置,匹配题目规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 05:54:03