用熊猫将第一列中内容不同但最后一列中内容相同的行

时间:2018-07-23 14:25:25

标签: python pandas dataframe row

我认为我的问题标题本身就很有解释性。因此,在下面的示例中,我将使用原始数据框和所需的输出进行表示。

想象一下,一个像这样的数据框:

         Gene    VC     TSB
1        TP53   Sil      A
2        TTN    Mis      B
3        TTN    Mis      C
4        TP53   Sil      C
5        TTN    Sil      B

我想要的输出如下:

      Gene   VC    TSB
3     TTN    Mis    C
4     TP53   Sil    C

如您所见,我只保留索引3和4,因为只有它们的1列值不同,但第三列值相同。

2 个答案:

答案 0 :(得分:0)

IIUC filtergroupby

df.groupby('TSB').filter(lambda x : (x['Gene'].nunique()==len(x['Gene']))&(len(x['Gene'])>1))
Out[737]: 
   Gene   VC TSB
3   TTN  Mis   C
4  TP53  Sil   C

答案 1 :(得分:0)

另一个选择是使用Series.duplicated()。首先创建一个掩码,以确保您不包括两个列的重复项,然后添加一个条件,即第一列必须是重复项:

mask = df.duplicated(subset=['tsb', 'gene'], keep=False)
target_df = df[~mask&df[~mask].duplicated(subset='tsb', keep=False)]
print(target_df)

   gene tsb
0  TP53   A
2   TTN   C
3  TP53   C
5   TTN   A