Python/Pandas实现二维df各列连续正数计数并追加结果行
Pandas 逐列统计末尾连续正数个数并追加计数行的实现方案
核心计数逻辑
严格遵循题目给定规则:从列头开始逐行遍历,维护当前连续正数计数器:
- 遇到值>0的元素:计数器加1
- 遇到值≤0(即非正数):计数器重置为0
- 遍历完整列后,计数器的最终值即为该列需要统计的连续正数个数,等价于从列尾向前数、直到碰到第一个非正数为止的正数长度。
分步实现代码
- 先构造题目对应的示例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"] )
- 定义逐列的计数计算函数,采用向量化逻辑避免逐元素循环,适配大数据量场景
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))
- 逐列计算计数结果,整理为新行格式
# 逐列应用计数函数,得到Series格式的计数结果 count_result = df.apply(calc_trailing_positive_count, axis=0) # 设置新行的索引名称为Count,和示例输出对齐 count_result.name = "Count"
- 将计数行追加到原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
相关产品推荐
相关产品推荐

