在我的数据集中,我需要查找何时重复 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 开头的所有行号。
非常感谢!
假设此示例和阈值
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])