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

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)

实现逻辑

  1. 先把连续重复的Substract值划分为同一个组,确保每一组内的Substract值相同,且和前后组的Substract值不同
  2. 逐组计算Final值:每个组的Final取「上一组Final+1」和「当前组Substract值」两者的最大值,保证既符合连续递增要求,也匹配需求的跳过规则
  3. 最后把每个组的Final值映射回原表的所有行即可,运行结果和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:42:02