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

遍历DataFrame结合相邻行值按用户标记符合状态要求的相邻行

实现方案

首先确保你的DataFrame已经按user、count升序排序完成(你描述中提到的按status排序应为笔误,按count排序才能匹配给出的示例数据顺序)。

方式1:iterrows实现(完全符合你的需求偏好)

import pandas as pd

# 先初始化标记列默认值为0
df['selection'] = 0

# 按用户分组独立处理,sort=False保留原有排序
for user, group in df.groupby('user', sort=False):
    prev_idx = None
    prev_status = None
    # 遍历当前用户的每一行
    for curr_idx, row in group.iterrows():
        curr_status = row['status']
        # 存在上一行时判断相邻行是否符合标记条件
        if prev_idx is not None:
            if prev_status == 'not completed' and curr_status == 'completed':
                # 同时标记前后两行
                df.loc[prev_idx, 'selection'] = 1
                df.loc[curr_idx, 'selection'] = 1
        # 更新上一行的索引和状态,用于下一轮判断
        prev_idx = curr_idx
        prev_status = curr_status

方式2:索引列表遍历实现(逻辑更直观,运行效率略高)

df['selection'] = 0

for user, group in df.groupby('user', sort=False):
    idx_list = group.index.tolist()
    status_list = group['status'].tolist()
    # 遍历所有相邻行对
    for i in range(len(status_list) - 1):
        if status_list[i] == 'not completed' and status_list[i+1] == 'completed':
            df.loc[idx_list[i], 'selection'] = 1
            df.loc[idx_list[i+1], 'selection'] = 1

两种实现得到的结果都和你给出的期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:54:00