如何基于多条件删除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
相关产品推荐
相关产品推荐

