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

Python pandas按Tag分组选取未被使用的首个Class值的实现方法

实现方案

实现思路

因为需要按Tag的处理顺序动态记录已使用的Class值,普通的drop_duplicates无法满足动态判重的需求,所以用遍历+已使用集合的方式实现:

  • 先按Tag分组,保留每个Tag对应的Class在原始数据中的出现顺序
  • 初始化集合记录已经被分配过的Class值
  • 按顺序遍历每个Tag的Class列表,优先选取第一个未被使用的Class值,若所有值都已被使用则跳过该Tag

代码实现

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Tag': ['A', 'A', 'B', 'B', 'C', 'C', 'C'],
    'Class': ['P', 'Q', 'P', 'Q', 'P', 'Q', 'R']
})

# 按Tag分组,sort=False保证Tag顺序和原数据首次出现顺序一致,不需要按字母排序可删除该参数
tag_class_map = df.groupby('Tag', sort=False)['Class'].apply(list)

used_classes = set()
result = []

for tag, class_list in tag_class_map.items():
    selected = None
    for cls in class_list:
        if cls not in used_classes:
            selected = cls
            used_classes.add(cls)
            break
    if selected:
        result.append({"Tag": tag, "Class": selected})

# 转换为最终DataFrame
result_df = pd.DataFrame(result)
print(result_df)

运行上述代码输出的result_df就是你需要的结果:

Tag Class
0   A     P
1   B     Q
2   C     R

如果某个Tag的所有Class都已经被分配过,该Tag不会出现在最终结果中,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:10