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

如何在Pandas DataFrame中按ID分组并按条件识别重复行

按组标记满足条件的Pandas重复行

需求说明

按ID分组,识别以下行并添加标记列Dup_with_condition_in_its_group_ID:

  • 组内Dest重复(同一ID下该Dest出现多次)
  • 该Dest对应的组内存在Change="No"的行
  • 标记规则:仅当该行Change="Yes"时标记为Yes,其余情况均为No

可复现数据

import pandas as pd

data = {
    "ID": ["RL1", "RL1", "RL1", "RL1", "RL2"],
    "Dest": ["Z32", "Z32", "Z33", "Z33", "Z32"],
    "Change": ["Yes", "No", "Yes", "Yes", "Yes"]
}
df = pd.DataFrame(data)

解决方案代码

# 计算标记列
df['Dup_with_condition_in_its_group_ID'] = (
    # 1. 检查当前(ID, Dest)组内是否存在Change="No"
    df.groupby(['ID', 'Dest'])['Change'].transform(lambda x: (x == 'No').any()) &
    # 2. 检查当前(ID, Dest)组内是否有重复(行数>1)
    df.groupby(['ID', 'Dest'])['Dest'].transform('size') > 1 &
    # 3. 当前行Change为"Yes"
    (df['Change'] == 'Yes')
).map({True: 'Yes', False: 'No'})

# 输出结果
print(df)

代码解释

  1. 组内存在No的判断:按ID+Dest组合分组,用transform将组内是否存在Change="No"的结果广播到每一行,得到布尔值。
  2. 重复行判断:同样按ID+Dest分组,用transform('size')获取组内行数,判断是否大于1(即该Dest在当前ID组内重复)。
  3. 当前行条件判断:直接判断当前行的Change是否为Yes。
  4. 组合条件并转换格式:三个条件同时满足时标记为Yes,否则No,用map将布尔值转为指定字符串格式。

输出结果

IDDestChangeDup_with_condition_in_its_group_ID
RL1Z32YesYes
RL1Z32NoNo
RL1Z33YesNo
RL1Z33YesNo
RL2Z32YesNo

内容的提问来源于stack exchange,提问作者DANIEL GARCIA DE CACERES HERRA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:35:10