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

Pandas新增Months_Adjusted列:Borrow_Rank变化时从0重置计数

问题说明

现有名为df的pandas DataFrame,包含ID、Months、Borrow_Rank三个字段,原始样例数据如下:

IDMonthsBorrow_Rank
101
111
121
201
211
221
302
312
401
411

需要新增Months_Adjusted列,计数规则为:按原有行顺序遍历,当前行Borrow_Rank取值与上一行不同时,重置计数从0开始;取值与上一行一致时,在上一行计数基础上加1。期望输出结果如下:

IDMonthsBorrow_RankMonths_Adjusted
1010
1111
1212
2013
2114
2215
3020
3121
4010
4111
实现方法

不需要写逐行遍历的循环,用pandas内置的向量化方法即可高效实现,核心逻辑是先识别Borrow_Rank连续相同值的分组,再在每个分组内生成从0开始的顺序计数:

import pandas as pd

# 生成连续同值分组的标记:相邻行Borrow_Rank不同时分组号递增
df["group_flag"] = (df["Borrow_Rank"] != df["Borrow_Rank"].shift()).cumsum()
# 按分组生成从0开始的顺序计数,即为目标列
df["Months_Adjusted"] = df.groupby("group_flag").cumcount()
# 删除临时使用的分组标记列
df.drop(columns="group_flag", inplace=True)

运行上述代码后得到的结果和预期完全一致。该实现为pandas原生向量化运算,数据量较大时运行效率远高于逐行遍历逻辑,且不会改变原数据的行顺序,第一行无前置数据的边界场景也会默认从0开始计数,符合规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:06:23