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

使用dplyr识别组内LEVEL1有但LEVEL0无对应TITLE的行

问题解决:识别分组内LEVEL=1时独有的TITLE行

原始数据

原始数据框df如下:

GROUP    NAME     TITLE     LEVEL
  A      John      Lead       0
  A      John      Staff      1
  A      Jake      Jr         0
  B      Bob       Lead       1
  B      Bob       Lead       0
  C      Andrew    Jr         0
  C      Andrew    Jr         1
  C      Rebecca   Staff      0

需求

找出每个GROUP中,同一NAME在LEVEL=1时拥有的TITLE,在LEVEL=0时不存在的行。

示例结果

符合条件的结果如下:

GROUP    NAME     TITLE     LEVEL
  A      John      Staff      1

原因:A组的John在LEVEL=1时的TITLE是Staff,但LEVEL=0时没有这个TITLE。

解决方案(基于Pandas)

通过分组筛选、集合对比即可实现需求,具体步骤和代码如下:

import pandas as pd

# 构造原始数据
data = {
    'GROUP': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],
    'NAME': ['John', 'John', 'Jake', 'Bob', 'Bob', 'Andrew', 'Andrew', 'Rebecca'],
    'TITLE': ['Lead', 'Staff', 'Jr', 'Lead', 'Lead', 'Jr', 'Jr', 'Staff'],
    'LEVEL': [0, 1, 0, 1, 0, 0, 1, 0]
}
df = pd.DataFrame(data)

# 提取LEVEL=0的所有TITLE,按GROUP和NAME分组存为集合
level0_title_sets = df[df['LEVEL'] == 0].groupby(['GROUP', 'NAME'])['TITLE'].apply(set).reset_index(name='LEVEL0_TITLES')

# 提取LEVEL=1的行,和LEVEL0的TITLE集合做关联
level1_merged = df[df['LEVEL'] == 1].merge(level0_title_sets, on=['GROUP', 'NAME'], how='left')

# 筛选出TITLE不在对应LEVEL0集合中的行
result = level1_merged[~level1_merged.apply(lambda row: row['TITLE'] in row['LEVEL0_TITLES'], axis=1)]

# 保留原始列并输出
result = result[['GROUP', 'NAME', 'TITLE', 'LEVEL']]
print(result)

运行代码后即可得到符合需求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:52:07