如何用Pandas为字符串列的每个值添加递增变量后缀?
问题解决:为DataFrame列添加递增后缀
原DataFrame
初始数据如下:
Specifieke_omschrijving_beheerobject Systeemdeelnummer 0 Weg, 4,300 tm 16,765 KP Zaandam - Purmerend Noord 007-0010-R 25 Weg, 16,765 tm 34,032 Purmerend Noord - Hoorn ... 007-0020-R 862 Weg, 50,212 tm 64,565 Middenmeer - Den Oever 007-0040-R
错误代码及问题分析
尝试用以下代码添加递增后缀时出现错误:
count = 1 while count < len(beheerobjecten): beheerobjecten["Systeemdeelnummer"] = beheerobjecten["Systeemdeelnummer"].apply(lambda x: f"{x}.{count}") count += 1
错误原因:
- 循环每次会遍历整列所有元素,重复追加当前count值,导致最终每个元素被多次添加后缀(比如先加
.1,再加.2,变成.1.2) - 循环条件
count < len(beheerobjecten)只执行2次(因为len=3),无法覆盖第3行数据
错误输出:
Specifieke_omschrijving_beheerobject Systeemdeelnummer 0 Weg, 4,300 tm 16,765 KP Zaandam - Purmerend Noord 007-0010-R.1.2 25 Weg, 16,765 tm 34,032 Purmerend Noord - Hoorn ... 007-0020-R.1.2 862 Weg, 50,212 tm 64,565 Middenmeer - Den Oever 007-0040-R.1.2
期望输出
Specifieke_omschrijving_beheerobject Systeemdeelnummer 0 Weg, 4,300 tm 16,765 KP Zaandam - Purmerend Noord 007-0010-R.1 25 Weg, 16,765 tm 34,032 Purmerend Noord - Hoorn ... 007-0020-R.2 862 Weg, 50,212 tm 64,565 Middenmeer - Den Oever 007-0040-R.3
正确解决方案
方法1:利用索引直接拼接
最简洁的方式,通过DataFrame的索引+1生成递增序号,直接与原列拼接:
beheerobjecten["Systeemdeelnummer"] = beheerobjecten["Systeemdeelnummer"] + "." + (beheerobjecten.index + 1).astype(str)
方法2:使用apply遍历行
通过axis=1传入整行数据,利用行索引生成序号:
beheerobjecten["Systeemdeelnummer"] = beheerobjecten.apply(lambda row: f"{row['Systeemdeelnummer']}.{row.name + 1}", axis=1)
方法3:enumerate遍历行
手动遍历每行,用enumerate生成从1开始的递增序号:
for idx, (index, row) in enumerate(beheerobjecten.iterrows(), start=1): beheerobjecten.loc[index, "Systeemdeelnummer"] = f"{row['Systeemdeelnummer']}.{idx}"
以上三种方法都能得到符合预期的输出结果。
内容的提问来源于stack exchange,提问作者Tessa
相关产品推荐
相关产品推荐

