我正在尝试确定相同的连续列值,当它们相同时,编辑第二列以使其行更具“唯一性”。
给出以下数据框
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
答案 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)
修改:
原始假设name
和code
具有与样本数据中相同的重复次数。如果它们不同,并且希望按code
组枚举name
值,则只需要对{{1}子集上的name
和code
和duplicated
进行分组}}如下:
['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)
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