Pandas如何筛选仅在单一分类下存在的Product对应的所有原始行
Pandas 需求实现方案
需求1:筛选仅在单一分类出现的Product对应的所有原始行
实现逻辑:先统计每个Product关联的唯一分类数量,仅保留关联分类数为1的Product对应的所有原始行,同分类下的重复行会自动保留。
实现代码:
# 统计每个Product对应的不同Category数量 prod_category_nunique = df.groupby('Product')['Category'].nunique() # 筛选仅属于1个分类的Product列表 single_category_products = prod_category_nunique[prod_category_nunique == 1].index # 过滤原DataFrame得到结果 result_df = df[df['Product'].isin(single_category_products)].copy()
原有代码问题说明:drop_duplicates仅对Category+Product的组合做去重,没有判断产品是否跨分类出现,无法实现剔除跨分类产品所有行的效果。
需求2:绘制指定分类下出现次数最多的产品柱状图
你遇到的分类内重复问题,大概率是Product字段存在格式不统一的情况,比如前后空格、大小写差异、不可见字符等,导致同一个产品被识别为多个不同值,先做字段清洗即可解决。
实现代码:
# 先清洗Product字段,统一格式避免统计误差 df['Product'] = df['Product'].str.strip() # 去除首尾空格 # 可按需添加其它清洗规则,比如统一大小写:df['Product'] = df['Product'].str.lower() # 筛选分类63的Top10高频产品绘制横向柱状图 df[df['Category'] == 63]['Product'].value_counts().head(10).plot(kind='barh', figsize=(8, 5))
如果需要批量获取所有分类的Top高频产品,可使用分组统计:
# 每个分类取Top3高频产品 top_prod_per_category = df.groupby('Category')['Product'].apply(lambda x: x.value_counts().head(3))
内容的提问来源于stack exchange,提问作者Krystian Warda
相关产品推荐
相关产品推荐

