我正在寻找一个有效的函数来查找至少连续出现三次且没有中断的标记.

输入示例:

import pandas as pd
marks = [83, 79, 83, 83, 83, 79, 79, 83]
student_id = [101, 102, 103, 104, 105, 106, 107, 108]
d = {'student_id':student_id,'marks':marks}
df = pd.DataFrame (d)

期望输出:

83

如果可能的话,我正在寻找一种比用for个循环逐行循环更有效的方法来跟踪前两个标记.也就是说,我在寻找比以下更好的东西:

def thrice_f (marks, number_of_apperances):
    cache = marks[0]
    counter = 1
    for mark in marks[1:]:
        if mark == cache:
            counter += 1
            if counter == number_of_apperances:
                return cache
        else:
            counter = 1
        cache = mark

推荐答案

您可以使用diff+ne+cumsum来识别连续标记组.然后对连续出现3次的标记进行索引:

groups = df['marks'].diff().ne(0).cumsum()
out = df.loc[groups.isin(groups.value_counts().eq(3).pipe(lambda x: x[x].index)), 'marks'].unique()

输出:

[83]

Python相关问答推荐

使用pandas MultiIndex进行不连续 Select

云上Gunicorn的Flask-socketIO无法工作

来自ARIMA结果的模型方程

除了Python之外,可以替代bare?

Polars Select 多个元素产品

telegram 机器人API setMyName不起作用

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

Gekko:Spring-Mass系统的参数识别

需要计算60,000个坐标之间的距离

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

Python解析整数格式说明符的规则?

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

Plotly Dash Creating Interactive Graph下拉列表

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

搜索按钮不工作,Python tkinter

干燥化与列姆化的比较

当条件满足时停止ODE集成?

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

从一个df列提取单词,分配给另一个列