如何在Pandas中删除含STATUS=0的SCU_KEY对应的所有行
Pandas按分组规则过滤行实现代码
实现方法1:groupby + filter(逻辑直观,适合中小数据集)
直接通过分组过滤规则匹配需求,代码如下:
import pandas as pd # 构造示例数据 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]}) # 核心处理逻辑:仅保留分组内所有STATUS都不为0的SCU_KEY对应的所有行 df = df.groupby('SCU_KEY').filter(lambda group: (group['STATUS'] != 0).all())
运行后得到的df和期望的df_2完全一致。
实现方法2:groupby + transform(性能更优,适合大数据集)
如果数据量较大,用transform生成布尔索引再过滤的性能会更好,代码如下:
import pandas as pd 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]}) # 生成每行对应SCU_KEY分组是否符合保留条件的布尔索引 keep_mask = df.groupby('SCU_KEY')['STATUS'].transform(lambda x: (x != 0).all()) df = df[keep_mask]
内容的提问来源于stack exchange,提问作者Deke Marquardt
相关产品推荐
相关产品推荐

