R语言按条件拆分数值型数据集列的实现方法
基于Pandas实现数据列拆分方案
处理逻辑
针对amt列的不同场景,按以下规则拆分:
- 若
amt是4位且以"00"结尾的数值:将其除以100的结果存入item列,item2列留空(NA) - 若
amt是非NA的普通数值:将原数值存入item2列,item列留空(NA) - 若
amt本身是NA:item和item2均留空(NA)
代码实现
import pandas as pd import numpy as np # 构造示例数据集 data = { 'amt': [9200, np.nan, 4300, 35, 6300, np.nan, 871, 200, 300, 239, 8700] } df = pd.DataFrame(data) # 生成item列:匹配4位以00结尾的数值,提取前两位(等价于除以100) df['item'] = np.where( df['amt'].astype(str).str.match(r'^\d{2}00$'), df['amt'] // 100, np.nan ) # 生成item2列:非NA且不满足item条件的数值,保留原数 df['item2'] = np.where( df['amt'].notna() & ~df['amt'].astype(str).str.match(r'^\d{2}00$'), df['amt'], np.nan ) # 查看最终结果 print(df)
代码说明
- 正则匹配:用
str.match(r'^\d{2}00$')精准筛选4位且末尾为00的数值,^\d{2}限定开头为两位数字,00$限定结尾为00 - 条件赋值:通过
np.where实现分支逻辑,满足条件时赋值对应结果,否则赋值NA - 类型兼容:将
amt转为字符串后再做正则匹配,避免数值类型的格式干扰
运行代码后即可得到你需要的目标输出。
内容的提问来源于stack exchange,提问作者AlexB
相关产品推荐
相关产品推荐

