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

如何在Pandas中按条件为整个分组标记标签?

Pandas按分组批量标记标签(组内满足条件则全组标记)

需求说明

当working_group分组内存在任意一行满足size >=2且process为pending时,整个分组的state列都标记为not_done;其余分组标记为something_else。

解决方案

原代码仅给满足条件的单行打标签,未扩展到整个分组。以下是两种高效实现方式:

方法1:先筛选目标分组再批量标记(性能更优)

先提取所有符合条件的working_group,再通过匹配分组给整组打标签:

import numpy as np
import pandas as pd

df = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6, 7, 8],
                        "process": ["pending", "finished", "finished", "finished", "finished", "finished", "finished", "pending"],
                        "working_group": ["a", "a", "c", "d", "d", "f", "g", "g"],
                        "size": [2, 2, 1, 2, 2, 1, 2, 2]})

# 1. 提取所有满足条件的working_group(去重)
pending_groups = df[(df['size'] >= 2) & (df['process'] == 'pending')]['working_group'].unique()

# 2. 给整个分组标记标签
df['state'] = np.where(df['working_group'].isin(pending_groups), 'not_done', 'something_else')

方法2:分组后用transform判断(逻辑更直观)

通过groupby结合transform,直接在组内判断是否存在满足条件的行,返回同长度的结果列:

import numpy as np
import pandas as pd

df = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6, 7, 8],
                        "process": ["pending", "finished", "finished", "finished", "finished", "finished", "finished", "pending"],
                        "working_group": ["a", "a", "c", "d", "d", "f", "g", "g"],
                        "size": [2, 2, 1, 2, 2, 1, 2, 2]})

# 按working_group分组,判断组内是否有满足条件的行,返回对应标签
df['state'] = df.groupby('working_group').transform(
    lambda group: 'not_done' if ((group['size'] >= 2) & (group['process'] == 'pending')).any() else 'something_else'
)['process']  # 取任意列均可,transform返回与原DataFrame同长度的Series

运行结果

执行上述任意一种方法后,得到的DataFrame如下:

id   process working_group  size     state
0   1   pending             a     2  not_done
1   2  finished             a     2  not_done
2   3  finished             c     1  something_else
3   4  finished             d     2  something_else
4   5  finished             d     2  something_else
5   6  finished             f     1  something_else
6   7  finished             g     2  not_done
7   8   pending             g     2  not_done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:10:35