如何使用 Pandas 注释列中的重复值

问题描述 投票:0回答:1

我有一个数据集,其中包含包含大量重复行的列。我的列看起来类似于下表中的索引列:

索引 新_专栏
2020BAS 2020BAS
2022CAD 2022CAD
2012BET 2012BET_1
2012BET 2012BET_2
2012BET 2012BET_3
2008TEQ 2008TEQ
2021JET 2021JET_1
2021JET 2021JET_2
2011ART 2011ART_1
2011ART 2011ART_2
2011ART 2011ART_3
2019质量保证体系 2019质量保证体系
2010POS 2010POS_1
2010POS 2010POS_2
2010POS 2010POS_3
2010POS 2010POS_4
2016YIG 2016YIG
2017LIM 2017LIM

使用 Pandas,我想创建一个新列,其中包含索引列中的行,并向特定行项目的所有重复出现添加编号注释。我心中的结果可以在上表中的New_Column系列中看到。

我一直在此处和其他地方进行搜索,但仍然找不到此问题的任何示例或建议的解决方案。诚然,我是 Python 新手,并且仍在尝试找出如何解决这个问题。任何帮助都将是一次巨大的学习经历

pandas dataframe duplicates data-annotations
1个回答
0
投票

您可以使用

.groupby('Index').cumcount()
获取重复值的计数,将这些值转换为适当的字符串后缀并将其添加回原始列:

import pandas as pd

df = pd.DataFrame({
    'Index': [
        '2020BAS', '2022CAD', '2012BET', '2012BET', '2012BET', '2008TEQ',
        '2021JET', '2021JET', '2011ART', '2011ART', '2011ART', '2019QAS',
        '2010POS', '2010POS', '2010POS', '2010POS', '2016YIG', '2017LIM',
    ]
})

df['New_Column'] = df['Index'] + df.groupby('Index').cumcount().apply(lambda v: f'_{v}' if v > 0 else '')

print(df)
#       Index New_Column
# 0   2020BAS    2020BAS
# 1   2022CAD    2022CAD
# 2   2012BET    2012BET
# 3   2012BET  2012BET_1
# 4   2012BET  2012BET_2
# 5   2008TEQ    2008TEQ
# 6   2021JET    2021JET
# 7   2021JET  2021JET_1
# 8   2011ART    2011ART
# 9   2011ART  2011ART_1
# 10  2011ART  2011ART_2
# 11  2019QAS    2019QAS
# 12  2010POS    2010POS
# 13  2010POS  2010POS_1
# 14  2010POS  2010POS_2
# 15  2010POS  2010POS_3
# 16  2016YIG    2016YIG
# 17  2017LIM    2017LIM
© www.soinside.com 2019 - 2024. All rights reserved.