如何用Python替换Pandas DataFrame列值为带递增编号的新文本
这里有两种简单易懂的方法帮你实现需求,适合Pandas新手:
方法一:使用factorize()快速编码
factorize()可以自动把列中的唯一值转换成连续数字编码,正好匹配我们的递增编号需求:
import pandas as pd # 构造你的示例DataFrame data = { 'value': [1,2,3,4,5,6,7,8], 'section': ['red','red','grey','blue','yellow','yellow','blue','green'], 'zone': [25,25,28,35,35,35,50,50] } df = pd.DataFrame(data) # 用factorize获取编码,编码从0开始,所以要+1转换成从1开始的编号 codes, _ = df['zone'].factorize() df['zone'] = 'Zone' + (codes + 1).astype(str) print(df)
运行后输出的结果就和你期望的完全一致。
方法二:用字典手动映射(更直观)
如果你想明确看到每个原始zone值对应的新编号,可以先创建一个映射字典:
# 获取zone列的唯一值列表 unique_zones = df['zone'].unique() # 创建映射规则:原始zone值 → "ZoneX"格式的新值 zone_mapping = {val: f"Zone{i+1}" for i, val in enumerate(unique_zones)} # 替换原zone列 df['zone'] = df['zone'].map(zone_mapping) print(df)
补充说明
- 两种方法都能保证相同原始zone值对应同一个新编号,完全满足你的分组逻辑要求。
- 不需要用
replace(),因为replace()更适合单个值的替换场景,而这里需要批量给唯一值分配递增编号,factorize()或map()的效率和可读性都更好。
内容的提问来源于stack exchange,提问作者Connor Garrett
相关产品推荐
相关产品推荐

