如何使用 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
我有如下数据框
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