迭代列中的数字并获取第n次重复开始的第一行号

问题描述 投票:0回答:1

在我的数据集中,我需要查找何时重复 280 次以上的 0,并返回数组中重复开始的第一行号。我正在使用 python 3.11。

样本数据:

差异

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

到目前为止我的代码:

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

我对 python 有点陌生。 使用此代码,我收到错误“:8:DeprecationWarning:在 0d 数组上调用非零值已被弃用,因为它的行为令人惊讶。如果打算使用旧行为,请使用

atleast_1d(arr).nonzero()
。” 我需要帮助来改进这段代码。我认为问题是我没有前 280 个项目作为 0,我需要继续迭代整个列以找到重复 280 次的 0 开头的所有行号。

非常感谢!

python pandas loops while-loop data-science
1个回答
0
投票

假设此示例和阈值

4
(而不是
280
):

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

您可以执行

groupby.size
来过滤
groupby.first
:

thresh = 4

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

g = df[m].reset_index().groupby(group)
g.size()
g['index'].first()[g.size()>thresh].to_numpy()

输出:

array([ 0, 11])

© www.soinside.com 2019 - 2024. All rights reserved.