如果连续的数据框值相等,则编辑第二列的值

时间:2019-07-02 20:18:18

标签: python pandas

我正在尝试确定相同的连续列值,当它们相同时,编辑第二列以使其行更具“唯一性”。

给出以下数据框

name    code
Jim      G
Jim      G
Bob      F
Abe      Z


if df['name'] == df.shift()['name']:
    num = 1
    df['code'].loc() = df['code'] + '_' + num
    num +=
    df['code'].loc().shift() = df['code'] + '_' + num

目标输出是:

name    code
Jim      G_1
Jim      G_2
Bob      F
Abe      Z

3 个答案:

答案 0 :(得分:4)

操作如下

g=df.groupby('name')
df.code=np.where(g.code.transform('count').gt(1),df.code+'_'+g.cumcount().add(1).astype(str),df.code)

答案 1 :(得分:4)

修改
原始假设namecode具有与样本数据中相同的重复次数。如果它们不同,并且希望按code组枚举name值,则只需要对{{1}子集上的namecodeduplicated进行分组}}如下:

['name', 'code']

原始
我将使用m = df.code + '_' + df.groupby(['name','code']).cumcount().add(1).astype(str) df.code.mask(df.duplicated(subset=['name','code'], keep=False), m) 来标记duplicated行并使用True

.mask

答案 2 :(得分:1)

IIUC

d0 = df.groupby('name').filter(lambda x: len(x) > 1)
d0 = d0.assign(code=lambda d: d.code.str.cat(np.arange(len(d)).astype(str), sep='_'))
d0.combine_first(df)

  name code
0  Jim  G_0
1  Jim  G_1
2  Bob    F
3  Abe    Z