pandas如何为指定列唯一值首次出现生成递增计数器
pandas 唯一值首次出现递增计数实现方案
你之前使用的df.groupby('val').cumcount()返回的是每个分组内部的行序号,会给重复值返回1、2……的组内编号,不符合重复值赋值为0的需求。
实现代码
import pandas as pd # 示例DataFrame df = pd.DataFrame({'val': [100, 101, 104, 104, 106, 108, 108, 108]}) # 标记val列首次出现的行 is_first_occurrence = ~df['val'].duplicated() # 首次出现的行生成递增计数器,其余行赋值为0 df['ctr'] = is_first_occurrence.cumsum().where(is_first_occurrence, 0)
输出结果
val ctr 0 100 1 1 101 2 2 104 3 3 104 0 4 106 4 5 108 5 6 108 0 7 108 0
逻辑说明
df['val'].duplicated()返回布尔序列,重复出现的位置为True,首次出现的位置为False,取反后得到所有首次出现的行标记。cumsum()对布尔值做累加计算(True视为1,False视为0),刚好给首次出现的行按顺序生成1、2、3……的递增序号。where()方法将非首次出现的位置值替换为0,得到目标结果。
内容的提问来源于stack exchange,提问作者A1122
相关产品推荐
相关产品推荐

