python - 为熊猫中的列添加具有重复值的数字
问题描述
我有一个这样的数据框:
df:
col1 col2
1 pqr
3 abc
2 pqr
4 xyz
1 pqr
我发现有重复的值和它的 pqr。我想在 pqr 出现的地方添加 1,2,3。我想要实现的最终数据框是:
df1
col1 col2
1 pqr1
3 abc
2 pqr2
4 xyz
1 pqr3
如何以有效的方式做到这一点
解决方案
对所有重复行使用duplicated
with并添加由创建的计数器:keep=False
cumcount
mask = df['col2'].duplicated(keep=False)
df.loc[mask, 'col2'] += df.groupby('col2').cumcount().add(1).astype(str)
或者:
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
如果只需要相同的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
推荐阅读
- python - 如何使用 python 在 revit API 中复制对象
- c# - 我不能在 c# 中使用变量(Windows 窗体应用程序)
- javascript - 如何在运行时同步导入 Typescript/Javascript?
- python - Tensorflow 无法计算 Addv2,因为输入 #1(从零开始)应该是双张量,但它是浮点张量 [Op:Addv]
- ibm-midrange - 如何编译现有的 RPGLE 程序
- python - 如何在 Python 中使用 contourf() 强制刻度具有一定的间距和范围?
- c++ - 如何从文件中显示蛋糕名称?
- matlab - 如何从两个表中制作单元格数组?
- .net - 为什么我的 Azure Functions 项目无法识别 Microsoft.AspNetCore.Http 程序集中的类?
- c++ - 重启后线程无法在while循环中再次运行