选择其他列中满足多个条件的列值

时间:2020-05-21 12:08:34

标签: python pandas dataframe slice

我有一个熊猫数据框,例如:

    Species     Pathway     Number of Gene Families
1    uniSU2     ABC           1.0
2    uniSU2     Wzy           11.0
3    uniSU2     Synthase      2.0
4    n116       Wzy           0.0   
5    n116       ABC           4.0
7    n116       Synthase      14.0
8    Aullax     ABC           9.0
9    Aulax      Synthase      1.0
10   Aullax     Wzy           2.0
11   Criepi     Wzy           0.0
12   Criepi     ABC           2.0
13   Criepi     Synthase      3.0

我想选择具有所有三种可能途径的物种(第一列)-ABC,Wzy,合酶(第二列)。 为此,所有三个途径的基因家族数(第三列)必须为正数(> 0)-ABC> 0; Wzy> 0,合酶> 0。

此数据框子集的结果为:

Species 
uniSU2
Aullax

我认为这让我半途而废:

geneCount_stacked.loc[geneCount_stacked['Number of Gene Families'] > 0, ['Species','Pathway']] 

但是我不能锻炼如何从这里前进。

非常感谢!

1 个答案:

答案 0 :(得分:3)

尝试一下:

res = pd.DataFrame({'Species': [x for x, y in df.groupby('Species') if  len({'ABC', 'Wzy', 'Synthase'} & set(y.Pathway)) == 3  and all(y['Number of Gene Families'] > 0)]})

输出

  Species
0  Aullax
1  uniSU2