如何修改Pandas DataFrame重复行id,使重复日期id一致且连续
解决Pandas中重复日期对应连续ID的问题
你的需求是让重复日期对应的ID相同,同时整个ID列保持连续递增,之前的方法依赖原ID列填充,但原ID列本身存在跳号,所以无法得到连续结果。以下是几种直接生成连续ID的方案:
方案1:使用pd.factorize
factorize会为每个唯一的day分配从0开始的连续编码,加1后即可得到从1开始的连续ID:
import pandas as pd dct = {'day': ['Mon', 'Tue', 'Wed', 'Wed', 'Thur', 'Fri', 'Fri', 'Sat', 'Sun'], 'id': ['1', '2', '3', '4', '5', '6', '7', '8', '9']} df = pd.DataFrame(dct) # 生成连续ID df['id'] = pd.factorize(df['day'])[0] + 1 print(df)
输出结果:
day id 0 Mon 1 1 Tue 2 2 Wed 3 3 Wed 3 4 Thur 4 5 Fri 5 6 Fri 5 7 Sat 6 8 Sun 7
方案2:使用groupby.ngroup
通过分组为每个唯一day分配组号,加1后实现从1开始的连续ID:
df['id'] = df.groupby('day').ngroup() + 1
方案3:使用rank方法
设置method='dense'确保相同day的排名一致且连续,最后转换为整数:
df['id'] = df['day'].rank(method='dense', ascending=True).astype(int)
这三种方法都无需依赖原ID列的数值,能直接生成符合要求的连续ID,彻底解决跳号问题。
内容的提问来源于stack exchange,提问作者tanzwood
相关产品推荐
相关产品推荐

