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

Pandas标记DataFrame行:ID存在于指定年份集且不在另一集合

pandas按ID匹配年份规则添加标签实现方案

实现逻辑

打标规则是ID维度的判断,不需要逐行计算,核心判断条件为单个ID同时满足:

  • 存在年份属于[2017,2018,2019]集合的记录
  • 不存在任何年份属于[2020,2021,2022]集合的记录
    满足以上两个条件的ID,其下所有行label设为1,否则设为0。

实现代码

直接使用groupby + transform完成分组判断和结果广播,代码简洁且运行效率高:

import pandas as pd

# 示例数据
df1 = pd.DataFrame({
    'ID': ['AX1', 'AX1', 'AX1','AX1','AX1','AX1','AX2','AX2','AX2','AX3','AX3','AX4','AX4','AX4'],
    'year':[2017,2018,2019,2020,2021,2022,2019,2020,2022,2019,2020,2017,2018,2019]
})

# 定义规则对应的年份集合
early_years = {2017, 2018, 2019}
late_years = {2020, 2021, 2022}

# 分组计算标签并广播到所有行
df1['label'] = df1.groupby('ID')['year'].transform(
    lambda year_series: 1 if (set(year_series) & early_years) and not (set(year_series) & late_years) else 0
)

结果验证

运行代码后输出的DataFrame与期望结果完全一致:

ID  year  label
0   AX1  2017      0
1   AX1  2018      0
2   AX1  2019      0
3   AX1  2020      0
4   AX1  2021      0
5   AX1  2022      0
6   AX2  2019      0
7   AX2  2020      0
8   AX2  2022      0
9   AX3  2019      0
10  AX3  2020      0
11  AX4  2017      1
12  AX4  2018      1
13  AX4  2019      1

注:如果数据量极大,可以先对ID和year做去重后判断,再映射回原表,进一步提升运行速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:49:15