-1

我有一个数据框,第一步我将在 A 列中找到值大于或等于 0.9 的行,第二步我将在 A 的值大于或等于 0.9 之前和之后获得 4 行,(注意:4 行之前和之后的 4 行,还包括值大于或等于 0.9 的行,所以每次满足条件时得到 9 行并应用一些函数进行计算)

df=pd.DataFrame({'A':[1,1,1,1,1,1,0.91,2,2,2,2,0.95,2],'flag':[1,1,0,1,1,1,5,1,1,0,1,1,1]})


out_put

df_out=pd.DataFrame({'A':[1,1,1,1,0.91,2,2,2,2],'flag':[0,1,1,1,5,1,1,0,1]})
4

1 回答 1

1

首先使用布尔掩码并检查您的第一个条件并使用.index属性获取它的索引:

df=df[df['A']>=0.9]    #1st condition fullfilled 

如果我们不知道确切的值,那么我们可以检查确切值和稍微多一点的值之间的值,并为您的第二个条件获取第一次出现值的索引:

position=df[df['A'].between(0.9,0.99)].index[0]

最后使用loc[]访问器和reset_index()方法:

resultdf=df.loc[position-4:position+4,:].reset_index(drop=True)  
#2nd condition fullfilled

现在,如果您打印resultdf,您将获得所需的输出:

    A       flag
0   1.00    0
1   1.00    1
2   1.00    1
3   1.00    1
4   0.91    5
5   2.00    1
6   2.00    1
7   2.00    0
8   2.00    1
于 2021-04-18T03:53:30.680 回答