如何使用 pandas 搜索一组特定的列

How to search a specific set of columns using pandas

我有如下数据框

  CHROM        POS FORMAT HG02317 HG03195 HG01959 HG03197
chr1  241663902     GT     0/0     0/0     0/0     0/1
chr1  241663902     GT     0/0     0/0     0/0     0/0
chr2   47641559     GT     0/1     0/1     0/0     0/0
chrX    47641559    GT  1   0   1   0 

我尝试使用

过滤= df[df['HG02317'].str.contains("0/1|1")]

但这会删除仍然包含 0/1|1 的所有其他行。我想检查 iloc[3:] 中的所有列是否为 0/1 或 1,如果不存在则将其删除。此外,由于 [3:] 中的列名不断变化,我也不能使用下面的列名,尽管它有效
过滤= df.query('HG02317== "0/1" | HG01959 == "0/1"')

这意味着我想按列索引搜索 使用索引,
filtered= df[(df.loc[:, 3:] == '0/1')] 给出错误。

我的预期输出是:

  CHROM        POS FORMAT HG02317 HG03195 HG01959 HG03197
chr1  241663902     GT     0/0     0/0     0/0     0/1
chr2   47641559     GT     0/1     0/1     0/0     0/0
chrX    47641559    GT  1   0   1   0 

在 pandas 中是否有解决此问题的方法? 提前致谢

首先 select 省略前 3 的所有列使用 DataFrame.iloc, then compare by DataFrame.isin and test by DataFrame.any 所有行,如果至少有一个值匹配:

#added 1 like string or 1 like number
filtered = df[df.iloc[:, 3:].isin(['0/1', '1', 1]).any(axis=1)]
print (filtered)
  CHROM        POS FORMAT HG02317 HG03195 HG01959 HG03197
0  chr1  241663902     GT     0/0     0/0     0/0     0/1
2  chr2   47641559     GT     0/1     0/1     0/0     0/0
3  chrX   47641559     GT       1       0       1       0