You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于R语言按条件拆分列:修正餐食数据meal_code错位问题

解决餐食数据集的meal_code提取与修正问题

问题分析

你的核心需求是从meal字段中提取正确的meal_code,覆盖meal_code列里的错误值。关键约束点:

  • 部分餐食名称包含数字,但所有meal_code均为字母开头+数字结尾的短字符串
  • 错误行的meal字段结构是「meal_code + 餐食名称」(如s1 sandwich)
  • 你之前使用的sep = "\\s(?=.*\\d)"无效,是因为该正则会匹配所有后跟数字的空格,无法区分餐食名称里的数字和meal_code的数字。

解决方案

利用meal_code「字母开头+数字结尾、位于字段开头」的特征,用Python Pandas实现精准提取:

代码实现

import pandas as pd

# 构造数据集
data = {
    'visitor': ['ahmed', 'ahmed', 'khaled', 'khaled'],
    'meal': ['water', 's1 sandwich', 'fish', '2extra coffee'],
    'meal_code': ['w1', 'w1', 'f1', 'c2']
}
df = pd.DataFrame(data)

# 提取meal_code:匹配开头的字母+数字组合,无匹配则保留原meal_code
df['meal_code'] = df['meal'].str.extract(r'^([a-zA-Z]\d)', expand=False).fillna(df['meal_code'])

修正后结果

visitormealmeal_code
ahmedwaterw1
ahmeds1 sandwichs1
khaledfishf1
khaled2extra coffeec2

补充说明

  • 正则^([a-zA-Z]\d)专门匹配字段开头的字母+数字组合,完美避开餐食名称中以数字开头的内容(如2extra)
  • 如果meal_code存在多位数字(如w12),可将正则调整为^([a-zA-Z]\d+)
  • fillna(df['meal_code'])确保正常行的meal_code不受修改

内容的提问来源于stack exchange,提问作者Abdullah Al Sobhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:51:15