Kal*_*nta 3 python dataframe pandas
我有一个这样的数据框:
df:
col1 col2
1 pqr
3 abc
2 pqr
4 xyz
1 pqr
Run Code Online (Sandbox Code Playgroud)
我发现有重复的值及其pqr.我想在pqr发生的地方添加1,2,3.我想要实现的最终数据框架是:
df1
col1 col2
1 pqr1
3 abc
2 pqr2
4 xyz
1 pqr3
Run Code Online (Sandbox Code Playgroud)
如何以有效的方式做到这一点
使用duplicated与keep=False所有重复数据删除行和添加计数器产生cumcount:
mask = df['col2'].duplicated(keep=False)
df.loc[mask, 'col2'] += df.groupby('col2').cumcount().add(1).astype(str)
Run Code Online (Sandbox Code Playgroud)
要么:
df['col2'] = np.where(df['col2'].duplicated(keep=False),
df['col2'] + df.groupby('col2').cumcount().add(1).astype(str),
df['col2'])
print (df)
col1 col2
0 1 pqr1
1 3 abc
2 2 pqr2
3 4 xyz
4 1 pqr3
Run Code Online (Sandbox Code Playgroud)
如果只需要相同的pqr值:
mask = df['col2'] == 'pqr'
df.loc[mask, 'col2'] += pd.Series(np.arange(1, mask.sum() + 1),
index=df.index[mask]).astype(str)
print (df)
col1 col2
0 1 pqr1
1 3 abc
2 2 pqr2
3 4 xyz
4 1 pqr3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |