首页 > 解决方案 > Pandas:如果其中任何行包含特定值,我如何删除具有相同唯一 ID 的任何行

问题描述

我有一个数据集,其中包含具有相应数据的唯一 ID 列表,但某些唯一 ID 有多行。

我想要做的是删除所有具有相同唯一 ID 的行,如果这些行中的任何一个包含特定值的单个/多个实例。

示例 DF:

ID      %       Trump Adj
abc123  0.833   Moron
xyz987  0.87    Loser
abc123  0.867   Puppet
abc123  0.812   Incompentent
hij456  0.812   Moron
lmn789  0.837   Senile 
lmn789  0.856   Opposite of Obama
lmn789  0.813   Embarrassing

我想删除“Trump Adj”列中包含“Moron”的所有行以及共享相同 ID 的任何其他行。

结果 DF:

ID      %       Trump Adj
xyz987  0.87    Loser
lmn789  0.837   Senile 
lmn789  0.856   Opposite of Obama
lmn789  0.813   Embarrassing

任何帮助或方向都会非常有帮助,如果需要进一步澄清,请告诉我!

标签: pythonpandas

解决方案


使用str.contains和布尔掩码:

df[~df['ID'].isin(df.loc[df.TrumpAdj.str.contains('Moron'), 'ID'].unique())]

       ID      %         TrumpAdj
1  xyz987  0.870            Loser
5  lmn789  0.837           Senile
6  lmn789  0.856  OppositeofObama
7  lmn789  0.813     Embarrassing

解释

首先,找到包含单词的列'Moron'

df.TrumpAdj.str.contains('Moron')

0     True
1    False
2    False
3    False
4     True
5    False
6    False
7    False
Name: TrumpAdj, dtype: bool

然后,找到ID具有包含单词的形容词的 unique Moron

df.loc[df.TrumpAdj.str.contains('Moron'), 'ID'].unique()
# array(['abc123', 'hij456'], dtype=object)

最后,找到我们刚刚创建的列表'ID'找到的所有行:

df[~df['ID'].isin(df.loc[df.TrumpAdj.str.contains('Moron'), 'ID'].unique())]

这给了我们想要的结果。


推荐阅读