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

基于多列值的Pandas DataFrame筛选:保留关联多供应商的商品行

问题描述

我们有一个无空值的pandas DataFrame,包含Vendor、Item、Facility三列,满足以下规则:

  • 每个Item对应的Facility值唯一
  • 一个Item可关联一个或多个Vendor
  • 同一Vendor可在同一Item的不同Facility中多次出现
  • 同一Item的一个Facility仅关联一个Vendor
  • Item值有序
  • 每一行唯一

示例数据如下:

VendorItemFacility
V1I1F1
V1I1F2
V2I1F4
V1I2F1
V1I2F2
V2I2F3
V3I2F5
V3I2F6
V3I3F3
V1I4F2
V4I4F4
V4I4F5
V1I5F1
V1I5F4

需求:创建新DataFrame,仅保留关联了多个唯一Vendor的Item的所有行,排除仅关联单个Vendor的Item行。比如示例中要保留I1、I2、I4的所有行,去掉I3、I5的行。

我尝试过循环为每个Item生成唯一Vendor列表,再判断len(Appended_Vendor_List_var) > 1,但没成功。

解决方案

不用循环,用pandas的分组统计就能高效解决,步骤如下:

  1. 统计每个Item的唯一Vendor数量
    按Item分组后,对Vendor列统计唯一值的数量:

    vendor_counts = df.groupby('Item')['Vendor'].nunique()
    
  2. 筛选符合条件的Item
    提取出唯一Vendor数量大于1的Item:

    valid_items = vendor_counts[vendor_counts > 1].index
    
  3. 过滤原DataFrame
    保留原DataFrame中Item在valid_items里的所有行:

    filtered_df = df[df['Item'].isin(valid_items)]
    

也可以把三步合并成一行,更简洁:

filtered_df = df[df.groupby('Item')['Vendor'].transform('nunique') > 1]

这里transform会把每个分组的计算结果对应到原DataFrame的每一行,直接完成筛选。

内容的提问来源于stack exchange,提问作者John Fonte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:13:10