我认为我的问题标题本身就很有解释性。因此,在下面的示例中,我将使用原始数据框和所需的输出进行表示。
想象一下,一个像这样的数据框:
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列值不同,但第三列值相同。
答案 0 :(得分:0)
IIUC filter
和groupby
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