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

如何在Pandas中按material_id分组,保留指定列唯一值并列出plant_id

解决方案:分组后同时实现指定列去重与列转列表

直接通过groupby.agg()为不同列指定对应的聚合逻辑,就能同时满足你的两个需求:

def search_output(materials):
    df = pd.DataFrame(materials)
    # 过滤掉@search.score列,分组后为各列指定聚合规则
    df_ref = df.loc[:, df.columns != '@search.score'].groupby('material_id').agg(
        material_description=('material_description', 'unique'),
        MPN=('MPN', 'unique'),
        plant_id=('plant_id', list)
    )
    # 可选:将unique返回的numpy数组转为Python列表,统一格式
    df_ref['material_description'] = df_ref['material_description'].apply(list)
    df_ref['MPN'] = df_ref['MPN'].apply(list)
    return df_ref

代码说明:

  • 用agg()的关键字参数写法,明确指定每一列的处理方式:
    • material_description和MPN列用unique聚合,自动保留该分组下的唯一值
    • plant_id列用list聚合,直接将分组内的所有值转为列表
  • 额外的apply(list)是因为unique()返回的是numpy数组,转成Python列表能和plant_id的格式保持一致,方便后续业务处理
  • 提前通过loc过滤掉不需要的@search.score列,避免干扰分组逻辑

对比原代码的改进:

  • 原第一段代码用统一的lambda x: list(x),会保留所有重复值,无法实现指定列去重
  • 原第二段代码只处理了两个去重列,遗漏了plant_id转列表的需求
  • 本方案精准控制每列的聚合逻辑,一次完成所有需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:40:44