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

Pandas实现按ID列分组并保留分组内存在'Yes'的字段值

Pandas按ID分组聚合保留字段Yes值实现

原始数据

构造测试DataFrame的代码如下:

import pandas as pd
data = [['123', 'Yes', 'No', 'No'], ['123', 'No', 'Yes', 'No'],['1234', 'No', 'Yes', 'No']]
df = pd.DataFrame(data, columns=['ID', 'Object_1', 'Object_2', 'Object_3'])

原始数据预览:

IDObject_1Object_2Object_3
123YesNoNo
123NoYesNo
1234NoYesNo

需求说明

按ID列分组聚合,同一ID分组下的Object_1/Object_2/Object_3列,只要组内任意一行存在Yes值,聚合后该字段就保留Yes,全为No则保留No。
期望输出结果:

IDObject_1Object_2Object_3
123YesYesNo
1234NoYesNo

实现代码

直接用groupby配合自定义聚合函数即可,写法简洁不需要硬编码列名,后续新增Object列也能自动适配:

result = df.groupby('ID', as_index=False).agg(
    lambda col: 'Yes' if 'Yes' in col.values else 'No'
)

运行后result就是符合要求的聚合结果。
如果数据量较大追求性能,可以先把Yes/No映射为布尔值,分组取最大值后再映射回文本,逻辑等价运行速度更快:

# 布尔映射:Yes为True,No为False,分组取max等价于判断是否存在True(即Yes)
result = (df
          .set_index('ID')
          .replace({'Yes': True, 'No': False})
          .groupby(level=0)
          .max()
          .replace({True: 'Yes', False: 'No'})
          .reset_index()
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:03:50