遍历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
相关产品推荐
相关产品推荐

