如何为Pandas DataFrame添加标签列,实现重复Ids序列分组?
给Pandas DataFrame按Ids组添加分组标签的简洁方法
先还原你的DataFrame场景:
import pandas as pd data = {'Ids': [1, 2, 3, 1, 2, 3, 1, 2, 3], 'Value': [32, 56, 87, 12, 45, 78, 14, 21, 56]} df = pd.DataFrame(data)
你需要给每一组连续的Ids 1-3添加Case标签(A、B、C...),这个需求用两行核心代码就能搞定,非常简洁:
# 生成分组编号:每次遇到Ids=1就开启新分组 df['Case'] = (df['Ids'] == 1).cumsum() # 将数字编号转为A/B/C这类字母标签 df['Case'] = df['Case'].apply(lambda x: chr(ord('A') + x - 1)) # 调整列顺序,让Case列排在最前面 df = df[['Case', 'Ids', 'Value']]
运行后就能得到你想要的结果:
Case Ids Value 0 A 1 32 1 A 2 56 2 A 3 87 3 B 1 12 4 B 2 45 5 B 3 78 6 C 1 14 7 C 2 21 8 C 3 56
原理说明
(df['Ids'] == 1).cumsum():这一步会先把所有Ids=1的行标记为1,其他行标记为0,然后对这些值累加。每遇到一个1,累加结果就加1,刚好对应每一组的编号(第一组是1,第二组是2,以此类推)。chr(ord('A') + x -1):把数字编号转换成对应的字母,1对应A,2对应B,完全匹配你需要的标签格式。
如果之后你的分组起始标识有变化,或者需要更灵活的分组逻辑,也可以用df.groupby((df['Ids'] == 1).cumsum()).ngroup()来生成编号,不过当前场景下上面的方法是最直接高效的。
内容的提问来源于stack exchange,提问作者Totor
相关产品推荐
相关产品推荐

