You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多条件删除DataFrame行?寻求更优实现方案

优化DataFrame数据过滤方案

问题背景

现有如下DataFrame结构:

dic = {'customer_id': [102, 102, 105, 105, 110, 110, 111], 
       'product':['skateboard', 'skateboard', 'skateboard', 'skateboard', 'shoes', 'skateboard', 'skateboard'],
       'brand': ['Vans', 'Converse', 'Vans', 'Converse', 'Converse','Converse', 'Vans'],
      'membership': ['member', 'not-member', 'not-member', 'not-member', 'member','not-member', 'not-member']}
df = pd.DataFrame(dic)

需求说明

需在customer_id与product的组合粒度下处理数据:如果某客户在某个产品下存在任意品牌的member记录,就删除该客户对应产品下所有membership为not-member的行。

  • 示例:客户102的skateboard产品有Vans品牌的member记录,所以只保留该行,删除同产品下的not-member行;
  • 客户105在skateboard产品下没有任何member记录,保留所有行;
  • 客户110的产品分shoes和skateboard,属于不同粒度组合,各自判断后保留所有行。

现有实现

目前通过生成customer_id+product唯一组合循环处理的方式实现了需求,但希望得到更高效的优化方案:

df['customer_product'] = df['customer_id'].astype(str) + '_' + df['product']
unique_customer_product = df['customer_product'].unique()
for pair in unique_customer_product:
    filtered_df = df[df['customer_product'] == pair]
    if 'member' in filtered_df['membership'].values:
        df = df.drop(df[(df.customer_product == pair) & (df.membership == 'not-member')].index)

内容的提问来源于stack exchange,提问作者M J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:05:31