如何基于dataframe指定列条件从固定起始值生成递增新列
实现方案
核心逻辑是判断ix列相邻行的取值变化次数,叠加初始值得到目标列,可直接用pandas内置的偏移、比较、累计求和方法实现,代码如下:
import pandas as pd # 构造示例数据,和你给出的输入一致 df = pd.DataFrame( data={'ix': ['pa', 'pa', 'pa', 'pe', 'fc', 'pb', 'pb', 'df']}, index=range(1, 9) ) # 核心逻辑,生成ans列 df['ans'] = 2348 + (df['ix'] != df['ix'].shift()).fillna(False).cumsum() # 输出验证 print(df)
逻辑说明
df['ix'].shift()会将ix列整体向下偏移1行,方便当前行和上一行的取值做对比- 比较运算符
!=会返回布尔序列,当前行和上一行ix取值不同时返回True(对应数值1),相同时返回False(对应数值0) - 第一行因为没有上一行数据,偏移后为
NaN,默认比较结果为True,用fillna(False)将其修正为False,保证第一个分组的增量为0 cumsum()对布尔序列做累计求和,得到截止当前行ix的累计变化次数- 加上初始值2348,最终得到符合要求的
ans列
运行后输出结果和你给出的预期完全一致:
ix ans 1 pa 2348 2 pa 2348 3 pa 2348 4 pe 2349 5 fc 2350 6 pb 2351 7 pb 2351 8 df 2352
内容的提问来源于stack exchange,提问作者Yash Gupta
相关产品推荐
相关产品推荐

