python - 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
任何帮助或方向都会非常有帮助,如果需要进一步澄清,请告诉我!
解决方案
使用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())]
这给了我们想要的结果。
推荐阅读
- javascript - 如何从 Shopify 中具有自定义值的替代购物车模板获取信息?
- java - 如何使 android 中的 Button 出现在固定位置并始终位于所有其他视图的前面?
- vim - Vim 的 E49:滚动大小无效
- ios - 在 Swift 中存储和引用大量数据以在 UITableView 中使用的最佳方式
- javascript - 承诺:在异步代码的序列化中传递一个值似乎在我的代码中无法正常工作
- django - django 没有这样的列:userdash_assetlist.user_id
- angular - 尝试获取 Angularfire 登录功能的 Observable.fromPromise 时出错
- reactjs - 如何从 react-pixi-fiber React 组件中获取本机 PIXI 对象?
- c - GCC -O0 使用内部函数生成奇怪的 AVX 额外存储/重新加载指令
- javascript - 如何在 Ionic-Angular 应用程序中保存图像(Base64 字符串)