如果 5 列中有 3 列低于特定值,则删除行

drop row if 3 out of 5 columns are lower than a specific value

我正在尝试编写一行代码,如果 5 列中的 3 列的 pvalue(列)低于 1.3,我会在数据框中删除一行。如果 pvalue 在 5 列中的 3 列中大于 1.3,我将保留该行。代码如下所示:

for i in np.arange(pvalue.shape[0]):
    if (pvalue.iloc[i,1:] < 1.3).count() > 2:
        pvalue.drop(index = pvalue.index[i], axis = 0, inplace = True)
    else:
        None

pvalue 数据框有 6 列,第一列是字符串,接下来的 5 列是实验的 pvalues。我收到此错误:

IndexError: single positional indexer is out-of-bounds

我不知道如何解决这个问题。我感谢每一个帮助。顺便说一句,我是一个完整的 python 初学者,所以请耐心等待! :) 感谢并期待您的解决方案!

我对 Pandas 不是很了解,所以可能有更好的方法来解决这个问题,但这应该可行:

通过使用 iterrows(),您可以遍历 DataFrame 的每一行。

for idx, row in pvalue.iterrows():

在循环中,您将有权访问 idx 变量,它是您当前正在迭代的行的索引,并且行值本身在 row 变量中。

然后对于每一行,您可以使用简单的 for 循环遍历每一列的值。

for val in row[1:]:

同时确保从第二个值开始(或者换句话说,忽略索引 0 并从索引 1 开始)。

剩下的就很简单了。

threshold = 1.3
for idx, row in pvalue.iterrows():
   count = 0
   for val in row[1:]:
      if val < threshold:
         count += 1
   if count > 2:
      pvalue.drop(idx, inplace=True)