基于Pandas提取多组数字的最小4位前缀并生成目标DataFrame
Pandas字符串拆分与前缀提取实现
原始数据
import pandas as pd data = { 'number': ['9020442,9028581132,9503312,78', '3553023,3553024,3553025,355,858000'], 'operator': ['zone 1', 'zone 2'] } df = pd.DataFrame(data)
需求说明
拆分每行number字段中的逗号分隔数字串,对每个数字执行规则处理:
- 数字长度≥4时,提取前4位作为前缀
- 数字长度<4时,直接保留原数字
最后将处理后的数字重新用逗号拼接,得到目标格式的DataFrame。
实现代码
def process_numbers(num_str): # 拆分字符串为单个数字列表 nums = num_str.split(',') # 按规则处理每个数字 processed = [num[:4] if len(num) >= 4 else num for num in nums] # 去重并保持原始顺序 unique_processed = list(dict.fromkeys(processed)) # 重新拼接为字符串 return ','.join(unique_processed) # 应用处理函数到number列 df['number'] = df['number'].apply(process_numbers) print(df)
代码解释
process_numbers函数:- 用
split(',')拆分逗号分隔的数字串,得到单个数字的列表 - 通过列表推导式遍历每个数字,根据长度判断提取前缀或保留原内容
- 用
dict.fromkeys()实现有序去重,解决示例中重复前缀的合并需求 - 最后用
','.join()将处理后的数字重新拼接为字符串
- 用
apply方法:将处理函数批量应用到number列的每一行,替换原列内容
运行结果
number operator 0 9020,9028,9503,78 zone 1 1 3553,355,8580 zone 2
内容的提问来源于stack exchange,提问作者chichi
相关产品推荐
相关产品推荐

