python - Pandas - 用增加的后缀标记列表中的重复元素
问题描述
鉴于以下情况:
from io import StringIO
csv = """\
col1,col2,col3
a,x,0.556281869
b,y,0.24783546399999998
c,z,0.010661738999999998
d,r,0.7982442009999999
a,p,0.642690298
f,q,0.734872757
c,t,0.432764343
a,g,0.37042963
"""
df_from = pd.read_csv(StringIO(csv))
csv = """\
col1,col2,col3
a,x,0.42584888
b,y,0.938256412
c,z,0.339138513
d,r,0.16887348600000002
a_2,p,0.18562532199999998
f,q,0.289833661
c,t,0.108988277
a_3,g,0.861110437
"""
df_to = pd.read_csv(StringIO(csv))
看起来像
# df_from
col1 col2 col3
0 a x 0.556282
1 b y 0.247835
2 c z 0.010662
3 d r 0.798244
4 a p 0.642690
5 f q 0.734873
6 c t 0.432764
7 a g 0.370430
# df_to
col1 col2 col3
0 a x 0.425849
1 b y 0.938256
2 c z 0.339139
3 d r 0.168873
4 a_2 p 0.185625
5 f q 0.289834
6 c t 0.108988
7 a_3 g 0.861110
我希望能够df_to
基于进行创建df_from
,我知道duplicated()
,但我不知道如何以一种可以根据需要添加后缀的方式应用它,因为尽管这些a
值是重复的,但它们是不同的东西。
解决方案
我们可以分两步来做,第一步groupby
,cumcount
然后mask
s='_'+df_from.groupby('col1').cumcount().add(1).astype(str)
df_from.col1+=s.mask(s=='_1','')
df_from
Out[290]:
col1 col2 col3
0 a x 0.556282
1 b y 0.247835
2 c z 0.010662
3 d r 0.798244
4 a_2 p 0.642690
5 f q 0.734873
6 c_2 t 0.432764
7 a_3 g 0.370430
推荐阅读
- android - Youtube 数据 API v3
- python - 使用信号时 Django UNIQUE 约束失败
- javascript - 映射数组时GetBoundingClientRect不是函数
- rest - 在 Binance 中生成新的存款地址
- php - Yii2 kartik-v tabsX 过滤后返回相同的选项卡
- sql - Postgresql 插入如果不存在 ON CONFLICT IGNORE 不工作
- python - 将数组元素明智地组合以形成坐标数组
- html - 如何使用 CSS 使图像滑块重复为无限循环或选取框
- python - 通过在 Python 中跳过一个字符串来制作两列?
- c++ - MSVC 可以找到匹配的构造函数,但 gcc 和 clang 找不到