Pandas如何生成自定义Final列:重复元素加1、跳过非连续首个匹配项
完整可运行代码
import pandas as pd data = {"Value": [4, 4, 2, 1, 1, 1, 0, 7, 0, 4, 1, 1, 3, 0, 3, 0, 7, 0, 4, 1, 0, 1, 0, 1, 4, 4, 2, 3], "IdPar": [0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 22, 22, 28, 28, 28, 28, 0, 0, 38, 38 , 0, 0, 0, 0, 0] } df = pd.DataFrame(data) df['Count'] = df.groupby('IdPar')['IdPar'].cumcount() + 1 df.loc [df['IdPar'] == 0, 'Count'] = 0 df['Substract'] = df.index - df['Count'] # 以下是生成Final列的代码 # 给连续相同的Substract值分组 df['group'] = df['Substract'].ne(df['Substract'].shift()).cumsum() # 提取每个分组的首行数据 group_headers = df.drop_duplicates('group', keep='first') # 计算每个分组对应的Final值 final_map = {} last_final = -1 for idx, row in group_headers.iterrows(): current_s = row['Substract'] current_final = max(last_final + 1, current_s) final_map[row['group']] = current_final last_final = current_final # 将结果映射回原表 df['Final'] = df['group'].map(final_map) # 删除辅助用的分组列 df = df.drop(columns='group') print(df)
实现逻辑
- 先把连续重复的Substract值划分为同一个组,确保每一组内的Substract值相同,且和前后组的Substract值不同
- 逐组计算Final值:每个组的Final取「上一组Final+1」和「当前组Substract值」两者的最大值,保证既符合连续递增要求,也匹配需求的跳过规则
- 最后把每个组的Final值映射回原表的所有行即可,运行结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者MayEncoding
相关产品推荐
相关产品推荐

