pandas DataFrame如何按指定列为分组内唯一值分配编号
实现方法
直接使用groupby搭配factorize即可完成需求,factorize会按值的首次出现顺序生成从0开始的连续整数ID,相同值会映射到同一个ID,加1后正好匹配你的编号规则,且会保留原始行顺序。
完整可运行代码如下:
import pandas as pd # 构建示例数据 df = pd.DataFrame({ 'Unique Id': ['H1', 'H1', 'H1', 'H1', 'H1', 'H2', 'H2', 'H2'], 'Date': ['2/03/2022', '2/03/2022', '2/03/2022', '3/03/2022', '4/03/2022', '9/03/2022', '9/03/2022', '10/03/2022'] }) # 按规则生成Count列 df['Count'] = df.groupby('Unique Id')['Date'].transform(lambda col: col.factorize()[0] + 1)
运行后得到的结果完全匹配预期:
Unique Id Date Count 0 H1 2/03/2022 1 1 H1 2/03/2022 1 2 H1 2/03/2022 1 3 H1 3/03/2022 2 4 H1 4/03/2022 3 5 H2 9/03/2022 1 6 H2 9/03/2022 1 7 H2 10/03/2022 2
说明
- 该逻辑不需要提前对数据去重或排序,会自动保留原始DataFrame的行顺序
- 同分组内重复出现的Date值会被分配相同编号,首次出现的新Date值编号自动递增
- Date列为字符串或datetime格式均不影响计算结果
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

