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

如何使用Python(pandas)统计指定列数据及连续相邻特定值数量

Pandas统计列中连续指定值相邻对的实现方法

原代码的问题

你写的代码跑不通是几个低级错误叠加导致的:

  • 变量、列名、测试数据不统一:测试数据里列名写的是A,代码里取的是Color列;遍历对象一会是data一会是finalData;循环里用的i没有初始化;测试数据里的green/red没加引号是未定义变量
  • 运算符优先级错误:&是pandas逐位与运算符,优先级比==高,你写的判断条件会先执行'green' & finalData['Color'].loc[i+1],逻辑完全错误
  • 循环逻辑漏洞:遍历到最后一行时取i+1会触发索引越界,i+=1写在if分支里会导致索引步进混乱
  • 索引用法错误:遍历行的时候优先用iloc按位置取值,不要混用loc的标签索引和自增数字索引,很容易踩坑

推荐的向量化实现(通用高效)

pandas做这类统计不要写iterrows循环,效率极低,用内置的移位方法几行代码就能搞定,而且数据量越大优势越明显:

import pandas as pd

# 先构造正确的测试数据,字符串值要加引号,列名和后续使用保持一致
df = pd.DataFrame(
    [['green'], ['green'], ['red'], ['green'], ['green'], ['green']],
    columns=['Color']
)

# 核心逻辑:逐行判断当前行和下一行是否同时为green
cur_green = df['Color'] == 'green'
next_green = df['Color'].shift(-1) == 'green' # shift(-1)将列向上平移1位,当前位置存储原下一行的值
continuous_green_pair = (cur_green & next_green).sum()

print(continuous_green_pair)
# 上述测试数据输出为3:第0-1行1对,第3-4、4-5行共2对,总计3对

这个方法是通用的:要统计其他值的连续相邻对,只要把判断条件里的'green'替换成目标值即可;要做多列组合的连续统计,只要追加对应的判断条件就行。

不推荐的循环写法(仅做参考)

如果你刚接触pandas想先理解循环逻辑,可以参考下面的正确写法,但是生产环境绝对不要这么写,万行以上数据速度会比向量化写法慢几十上百倍:

count = 0
# 最多遍历到倒数第二行,避免i+1索引越界
for i in range(len(df) - 1):
    # 标量值的逻辑判断用and,不要用逐位运算符&
    if df['Color'].iloc[i] == 'green' and df['Color'].iloc[i+1] == 'green':
        count += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:51:28