在我的数据集中,我需要找出S重复超过280次的0‘的个数,并取回数组中重复开始的第一个行号.我使用的是Python3.11.

样本数据:

差异

0
0
0
0
0
0
0
.
.
.
5
5
.
.
0
0
0
0

或者创建样本数据集:

   ACD=[0,5]

   df2 = pd.DataFrame(np.repeat(ACD, 100, axis=0))
   df3=df2.sample(frac=1,axis=1).sample(frac=1).reset_index(drop=True)

到目前为止,我的代码是:

c=[]
for values,row in df.loc[:, ['差异']].iterrows():
        i=0
        while row['差异']  == 0:
            count = sum(1 for i in row)
            i +=1
            if count > 280:
                continue
            c.append(np.where(row['差异']))
        else:
            values+=1

预期输出:

row_number_rep= [5,90,120] #showing the specific row numbers where the repetition stars.

我对Python 还是个新手. 在这段代码中,我得到错误":8:DeposationWarning:不建议对0d数组调用非零值,因为它的行为令人惊讶.如果是有意使用旧行为,则使用atleast_1d(arr).nonzero()." 我需要帮助来改进这个代码.我想问题是我没有像0‘S那样的前280项,我需要不断地迭代整列以找到0’S重复280次的所有行号.

非常感谢!

推荐答案

pandas approach

假设本例的阈值为4(而不是280):

df = pd.DataFrame({'differences': [0,0,0,0,0,1,2,0,3,0,0,0,0,0,0,4,0,5]})

    differences
0             0  # 0: first stretch of >4
1             0
2             0
3             0
4             0
5             1
6             2
7             0
8             3
9             0  # 9: second stretch of >4
10            0
11            0
12            0
13            0
14            0
15            4
16            0
17            5

您可以执行groupby.size来过滤groupby.first:

thresh = 4

m = df['differences'].eq(0)
group = (~m).cumsum().to_numpy()

g = df.reset_index()[m].groupby(group[m])
g.size()

out = g['index'].first()[g.size()>thresh].to_numpy()

输出:array([ 0, 9])

loop approach
lst = [0, 0, 0, 0, 0, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0]
thresh = 4

start = -1
zeros = False
count = 0
out = []
for i, v in enumerate(lst+[-1]):
    if v==0:
        if not zeros:
            count = 0
            start = i
            zeros = True
        count += 1
        continue
    if count > thresh:
        if zeros:
            out.append(start)
    zeros = False

out
# [0, 9, 18]
itertools.groupby approach:
from itertools import groupby

lst = [0, 0, 0, 0, 0, 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0]
thesh  = 4

out = [x[0][0] for k,g in groupby(enumerate(lst), key=lambda x: x[1]==0)
       if k and len(x:=list(g))>thresh]
# [0, 9, 18]

Python相关问答推荐

即使在可见的情况下也不相互作用

Matlab中是否有Python的f-字符串等效物

如何避免Chained when/then分配中的Mypy不兼容类型警告?

海运图:调整行和列标签

scikit-learn导入无法导入名称METRIC_MAPPING64'

将输入管道传输到正在运行的Python脚本中

如果值发生变化,则列上的极性累积和

Pandas计数符合某些条件的特定列的数量

在ubuntu上安装dlib时出错

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

如何使用Numpy. stracards重新编写滚动和?

使用特定值作为引用替换数据框行上的值

try 检索blob名称列表时出现错误填充错误""

Python—为什么我的代码返回一个TypeError

Python Mercury离线安装

jsonschema日期格式

我什么时候应该使用帆布和标签?

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

在聚合中使用python-polars时如何计算模式

将标签与山脊线图对齐