如何基于DataFrame的City列重置计数生成自定义ID?
解决方案
要实现同一城市内计数从1递增、切换城市后重置计数的效果,核心是用分组内计数替代全局索引。具体修改如下:
修改后的代码
# 生成每个城市分组内从1开始的递增序号 df['seq'] = df.groupby('City').cumcount() + 1 # 拼接自定义ID df['id'] = df.City.str[:3] + '-' + df.Name.str[:3] + '-' + df['seq'].astype(str) # 可选:删除临时序号列 df = df.drop('seq', axis=1)
代码说明
df.groupby('City').cumcount():对City列的每个分组单独计数,默认从0开始,加1后实现从1起步的递增序列,完美解决跨城市计数不重置的问题。- 拼接逻辑和你原有代码一致,只是把全局的
df.index替换成了分组内的专属序号,保留了你想要的字符串前缀规则。
效果验证
用你的示例数据测试:
输入DataFrame:
City Name 0 Paris John 1 Paris Paul 2 Paris Pierre 3 Paris Paula 4 Rome Riccardo 5 Rome Jean-Paul 6 Rome Franc
运行代码后输出的id列:
0 Par-Joh-1 1 Par-Pau-2 2 Par-Pie-3 3 Par-Pau-4 4 Rom-Ric-1 5 Rom-Jea-2 6 Rom-Fra-3
完全匹配你期望的输出效果。
内容的提问来源于stack exchange,提问作者bravopapa
相关产品推荐
相关产品推荐

