python - 根据一个行值删除多行
问题描述
我试图找出一个代码,如果'STATUS' == 0,则删除相同'SCU_KEY'的所有行。所以你会看到SCU_KEY -> 5的状态为0,所以我想删除所有的 SCU_KEY 包含 5。这是一个示例数据帧和所需的输出。
数据框:
df = pd.DataFrame({'SCU_KEY': [3, 3, 3, 5, 5, 5, 5, 5, 16, 16, 16],
'STATUS' : [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]})
期望的输出:
df_2 = pd.DataFrame({'SCU_KEY': [3, 3, 3, 16, 16, 16],
'STATUS' : [1, 1, 1, 1, 1, 1]})
解决方案
使用第一个过滤器查找 STATUS 等于 0 的 SCU_KEY,然后检查 SCU_KEY 不等于您的第一个过滤器的所有行。
>>> df[~df['SCU_KEY'].isin(df.loc[df['STATUS'] == 0, 'SCU_KEY'])]
SCU_KEY STATUS
0 3 1
1 3 1
2 3 1
8 16 1
9 16 1
10 16 1
第一个过滤器:
>>> df.loc[df['STATUS'] == 0, 'SCU_KEY']
5 5
Name: SCU_KEY, dtype: int64
推荐阅读
- windows - 除了 AppData、文档之外,用户数据是否存储在其他任何地方
- websocket - 在 Micronaut 中使用 RxJava 进行 Websocket 请求路由
- android - 创建 MutableList 时这意味着什么?
- function - TypeError:行不是函数
- node.js - 优化redis的问题
- vue.js - 如何在 NuxtJS 应用程序中的页面加载时防止 Vuejs 转换
- excel - 使用 vlookup 函数时遇到相同的值
- c# - Razor - 用于 iis 的 C# 语法
- byte-buddy - 有没有办法获得匹配的 MethodDescription?
- javascript - 有没有办法对 Web Notification API 进行 Jest 测试和监视?