You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python按Country列分组生成递增ID字段?

按国家生成独立递增前缀ID的解决方案

问题根源

你原代码的问题在于用了全局递增的变量i,每次循环都会把对应国家的所有行ID覆盖为当前i的值,最终每个国家的ID都变成了同一个全局序号,完全不符合每个国家独立计数的需求。

最优解决方案(Pandas向量化操作)

用groupby加cumcount是最符合Pandas风格且高效的写法,无需循环:

# 定义国家与前缀的映射关系
country_prefix = {
    'Germany': 'GR',
    'Italy': 'IT',
    'France': 'FR'
}

# 1. 按Country分组,生成每组内从1开始的递增序号
new_cols5['ID'] = new_cols5.groupby('Country').cumcount() + 1
# 2. 映射前缀并拼接成最终ID
new_cols5['ID'] = new_cols5['Country'].map(country_prefix) + new_cols5['ID'].astype(str)

运行后得到的结果完全符合预期:

IDCountry
GR1Germany
FR1France
IT1Italy
GR2Germany
FR2France
IT2Italy

循环实现方案(不推荐,仅作参考)

如果一定要用循环,需要用字典单独记录每个国家的计数,避免全局变量干扰:

country_prefix = {
    'Germany': 'GR',
    'Italy': 'IT',
    'France': 'FR'
}
# 初始化每个国家的计数器
country_counter = {country: 0 for country in country_prefix.keys()}

# 遍历每一行生成ID
for idx, row in new_cols5.iterrows():
    country = row['Country']
    country_counter[country] += 1
    new_cols5.loc[idx, 'ID'] = f"{country_prefix[country]}{country_counter[country]}"

注意事项

优先使用groupby的向量化方案,当数据量较大时,循环的效率会远低于Pandas的内置分组操作。

内容的提问来源于stack exchange,提问作者HazeLand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:40:16