我有一個如下的資料框
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:] 中的列名不斷變化,我也無法使用以下內容,盡管它可以作業
filters= df.query('HG02317== "0/1" | HG01959 == "0/1"')
這意味著我想通過 col index 搜索使用 index ,
過濾= 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
在熊貓中有沒有解決這個問題的方法?提前致謝
uj5u.com熱心網友回復:
首先選擇省略前 3 個 use 的所有列DataFrame.iloc,然后比較DataFrame.isin并測驗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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/443805.html
