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

如何在DataFrame中提取某列连字符前内容生成新列?

解决方案:提取DataFrame中含连字符字符串的前缀

需求说明

需在Pandas DataFrame中新增group列:

  • 若product列的字符串包含连字符-,提取连字符之前的内容填入group
  • 若product列无连字符,group列留空

原代码问题

原代码错误地使用空格" "作为分割符,而需求是基于连字符"-"分割,因此无法得到预期结果。

修正方案

提供两种简洁有效的实现方式:

方法1:使用str.split按连字符分割

import pandas as pd

data = {'month': ['April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January', 'February', 'March'],
    'kpi': ['D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'K sales', 'K sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales'],
    'product': ['ps', 'ss', 'ks', 'ds', 'ls', 'js', 'vs', 'es', 'rs',
            'os', 'Export-ps', 'Retail-is', 'Export-water', 'Retail-bottle', 'Export-salt', 'Farming-Fruits', 'Farming-Vegetables', 'Export-Tea',
            'Export-water', 'Retail-bottle', 'Retail-water', 'Farming-Vegetables', 'Farming-Vegetables', 'Export-salt'],
    'year': [2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2023, 2023, 2023, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2023, 2023, 2023]
    }
df = pd.DataFrame(data)

# 按连字符分割,仅分割1次并展开为DataFrame
split_result = df["product"].str.split("-", n=1, expand=True)
# 提取分割后的第一部分,空值填充为空字符串
df["group"] = split_result[0].fillna("")
# 对无连字符的行,将group列置空
df.loc[~df["product"].str.contains("-"), "group"] = ""

print(df)

方法2:使用正则表达式str.extract(更简洁)

import pandas as pd

data = {'month': ['April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'January', 'February', 'March'],
    'kpi': ['D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'D sales', 'K sales', 'K sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales', 'S sales'],
    'product': ['ps', 'ss', 'ks', 'ds', 'ls', 'js', 'vs', 'es', 'rs',
            'os', 'Export-ps', 'Retail-is', 'Export-water', 'Retail-bottle', 'Export-salt', 'Farming-Fruits', 'Farming-Vegetables', 'Export-Tea',
            'Export-water', 'Retail-bottle', 'Retail-water', 'Farming-Vegetables', 'Farming-Vegetables', 'Export-salt'],
    'year': [2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2023, 2023, 2023, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2023, 2023, 2023]
    }
df = pd.DataFrame(data)

# 正则匹配连字符前的内容,无匹配时返回空字符串
df["group"] = df["product"].str.extract(r'^(.*?)-', expand=False).fillna("")

print(df)

结果验证

运行上述任意代码后,group列将完全符合期望输出:无连字符的行留空,含连字符的行正确提取前缀内容。

内容的提问来源于stack exchange,提问作者Abin Benny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:30:44