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

基于组内多行条件更新Pandas DataFrame的status列值问题

解决方法

方法一:基于组内active ID集合匹配

先构建每个分组下的active ID集合,再逐行判断是否满足条件:

import pandas as pd

data = {'id': [1, 2, 3, 4, 5, 6, 7],
        'group_id': ['A', 'A', 'A', 'B', 'B', 'B', 'B'],
        'status': ['pending', 'active', 'pending', 'pending', 'active', 'pending', 'pending'],
        'related_id': [None, None, 1, None, None, 4, 4]}
df = pd.DataFrame(data)

# 1. 提取每个group下的active id集合
active_id_map = df[df['status'] == 'active'].groupby('group_id')['id'].apply(set).reset_index(name='active_ids')

# 2. 合并到原数据,让每行都能获取所在组的active id列表
df = df.merge(active_id_map, on='group_id', how='left')

# 3. 构建更新条件:当前status是pending,且related_id存在并属于本组的active id
update_mask = (df['status'] == 'pending') & \
              df['related_id'].notna() & \
              df.apply(lambda row: row['related_id'] in row['active_ids'], axis=1)

# 4. 更新status列
df.loc[update_mask, 'status'] = 'resolved'

# 清理临时生成的列
df.drop('active_ids', axis=1, inplace=True)

print(df)

方法二:基于(group_id, id)配对匹配(更高效)

对于大数据集,避免逐行apply,通过配对组合判断,效率更高:

import pandas as pd

data = {'id': [1, 2, 3, 4, 5, 6, 7],
        'group_id': ['A', 'A', 'A', 'B', 'B', 'B', 'B'],
        'status': ['pending', 'active', 'pending', 'pending', 'active', 'pending', 'pending'],
        'related_id': [None, None, 1, None, None, 4, 4]}
df = pd.DataFrame(data)

# 1. 提取所有active行的(group_id, id)配对
active_pairs = set(df[df['status'] == 'active'][['group_id', 'id']].apply(tuple, axis=1))

# 2. 检查当前行的(group_id, related_id)是否在active配对中
df['valid_related'] = df[['group_id', 'related_id']].apply(tuple, axis=1).isin(active_pairs)

# 3. 构建更新条件
update_mask = (df['status'] == 'pending') & df['related_id'].notna() & df['valid_related']

# 4. 更新status
df.loc[update_mask, 'status'] = 'resolved'

# 清理临时列
df.drop('valid_related', axis=1, inplace=True)

print(df)

两种方法都能得到期望输出:

id group_id    status  related_id
0   1        A   pending        None
1   2        A    active        None
2   3        A  resolved           1
3   4        B   pending        None
4   5        B    active        None
5   6        B  resolved           4
6   7        B  resolved           4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:42:16