如何在循环中为DataFrame新增列存储label_A列提取的分组唯一值
实现方案
方案1:Pandas原生实现(效率更高,无需手动循环)
默认按照「相邻数值差≤1归为同一组」的规则分组,代码如下:
import pandas as pd import numpy as np # 1. 按label_A排序后生成临时分组ID results = results.sort_values('label_A').reset_index(drop=True) results['group_id'] = (results['label_A'].diff() > 1).cumsum() # 2. 聚合得到每个分组的数值区间,映射回原表生成新列 group_mapper = results.groupby('group_id')['label_A'].agg( lambda x: [x.min(), x.max()] # 存储分组上下限的写法 # 如果要存储分组内所有唯一值,替换为:lambda x: sorted(x.unique().tolist()) ).to_dict() results['group_range'] = results['group_id'].map(group_mapper) # 删除临时生成的分组ID列 results.drop('group_id', axis=1, inplace=True)
方案2:循环实现
符合你要求的循环操作逻辑,代码如下:
# 1. 排序后遍历数值生成分组 sorted_labels = sorted(results['label_A'].tolist()) group_list = [] current_group = [sorted_labels[0]] for val in sorted_labels[1:]: # 相邻数值差值≤1则归为同一组,可按需调整阈值 if val - current_group[-1] <= 1: current_group.append(val) else: group_list.append([current_group[0], current_group[-1]]) current_group = [val] # 补充最后一个未加入的分组 group_list.append([current_group[0], current_group[-1]]) # 2. 生成数值到所属分组的映射字典,写入新列 val_to_group = {} for g in group_list: for num in range(g[0], g[1]+1): val_to_group[num] = g results['group_range'] = results['label_A'].map(val_to_group)
内容的提问来源于stack exchange,提问作者anad
相关产品推荐
相关产品推荐

