Pandas字符串列处理:为小数点前相同值添加补零递增计数器
处理Pandas DataFrame中STRING类型列的重复前缀数值,生成递增后缀
给定一个包含STRING类型列HOURCENTSEG的Pandas DataFrame,原始数据如下:
HOURCENTSEG(string-column) 070026.16169 070026.16169 070026.16169 070026.16169 070052.85555 070052.85555 070109.43620 070202.56430 070202.56431 070202.56434 070202.56434
需要按照以下规则处理该列:当小数点前的数值相同时,将小数点后的部分替换为左侧补零的5位递增计数器,单个值的后缀固定为00001。处理后的预期结果如下:
HOURCENTSEG (string-column) 070026.00001 070026.00002 070026.00003 070026.00004 070052.00001 070052.00002 070109.00001 (若仅一个值则为00001) 070202.00001 070202.00002 070202.00003 070202.00004
实现代码
import pandas as pd # 创建示例DataFrame data = { 'HOURCENTSEG': [ '070026.16169', '070026.16169', '070026.16169', '070026.16169', '070052.85555', '070052.85555', '070109.43620', '070202.56430', '070202.56431', '070202.56434', '070202.56434' ] } df = pd.DataFrame(data) # 1. 提取小数点前的前缀部分 df['prefix'] = df['HOURCENTSEG'].str.split('.', expand=True)[0] # 2. 按前缀分组,生成组内递增序号(从1开始) df['counter'] = df.groupby('prefix').cumcount() + 1 # 3. 将序号格式化为5位左侧补零的字符串 df['formatted_counter'] = df['counter'].astype(str).str.zfill(5) # 4. 拼接前缀和格式化后的计数器,生成新的HOURCENTSEG列 df['HOURCENTSEG'] = df['prefix'] + '.' + df['formatted_counter'] # 可选:删除中间辅助列 df = df.drop(['prefix', 'counter', 'formatted_counter'], axis=1) print(df)
代码说明
- 提取前缀:通过
str.split('.', expand=True)[0]拆分字符串,获取小数点前的部分作为分组依据。 - 生成递增计数器:使用
groupby('prefix').cumcount()获取组内的索引(从0开始),加1后得到从1开始的递增序号。 - 格式化计数器:用
str.zfill(5)将序号转换为5位字符串,不足5位时左侧补零。 - 拼接结果:将前缀和格式化后的计数器用小数点连接,替换原列的值。
运行代码后,即可得到符合要求的处理结果。
内容的提问来源于stack exchange,提问作者Sergio Urrea González
相关产品推荐
相关产品推荐

