首页 > 解决方案 > 根据一个行值删除多行

问题描述

我试图找出一个代码,如果'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]})

标签: pythonpandas

解决方案


使用第一个过滤器查找 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

推荐阅读