我可以帮你翻译成如下内容:
我有一个MultiIndex Pandas DataFrame,它看起来像以下这样:
import pandas as pd
import numpy as np
genotype_data = [
['0/1', '120,60', 180, 5, 0.5, '0/1', '200,2', 202, 99, 0.01],
['0/1', '200,20', 60, 99, 0.1, '0/1', '200,50', 250, 99, 0.4],
['0/1', '200,2', 202, 99, 0.01, '0/1', '200,2', 202, 99, 0.01]
]
genotype_columns = [['Sample1', 'Sample2'], ['GT', 'AD', 'DP', 'GQ', 'AB']]
cols = pd.MultiIndex.from_product(genotype_columns)
genotype = pd.DataFrame(data=genotype_data, columns=cols)
info_columns = [['INFO'], ['AC', 'DEPTH']]
cols = pd.MultiIndex.from_product(info_columns)
info = pd.DataFrame(data=[[12, 100], [23, 200], [40, 40]], columns=cols)
df = pd.concat([info, genotype], axis=1)
我想过滤掉df中任何一个样本(在这种情况下为Sample1或Sample2)的DP >= 50 & GQ < 4的行。在这些条件下,除了第一行之外,所有行都应该被过滤掉。
我不知道从哪里开始,希望能得到一些帮助。
编辑:
通过jezrael的帖子的帮助,我找到了解决方案。代码如下:
genotype = df.ix[:,3:]
DP = genotype.xs('DP', axis=1, level=1)
GQ = genotype.xs('GQ', axis=1, level=1)
conditions = (DP.ge(50) & GQ.le(4)).T.any()
df = df[conditions]
return df
idxmax()
仅适用于第一列,如果需要所有满足条件的行,则可以将其删除。 - jezrael