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

Pandas如何根据DV2列首字符为DVZ列条件填充对应值

Pandas按列首字符匹配填充列值方案

需求说明

需要基于DataFrame中DV2列的字符串起始字符,为DVZ列填充对应值,匹配规则如下:

  • DV2值以9开头:DVZ列填充data1
  • DV2值以7开头:DVZ列填充data2
  • DV2值以3开头:DVZ列填充data3
  • DV2值以6开头:DVZ列填充data4

原有错误代码:

[dew["DV0"].astype('str').str.startswith("9")] = "Sin"

代码错误点:

  • 列名引用错误,判断对象写为不存在的DV0列,实际需要判断的是DV2列
  • 未指定赋值的目标列,赋值逻辑没有关联到需要填充的DVZ列
  • 仅写了单条判断逻辑,赋值内容也不符合需求的data1~data4规则
  • 变量名错误,示例数据对应的DataFrame名和代码中dew不匹配

可用实现方案

方案1:使用numpy.select做多条件匹配(逻辑清晰,适合规则较多的场景)

import numpy as np

# 统一将DV2列转为字符串类型,避免数值类型取值异常
dv2_first = df["DV2"].astype("str").str[0]

# 按顺序写匹配条件、对应填充值
cond_list = [
    dv2_first == "9",
    dv2_first == "7",
    dv2_first == "3",
    dv2_first == "6"
]
fill_value_list = ["data1", "data2", "data3", "data4"]

# 批量赋值到DVZ列
df["DVZ"] = np.select(cond_list, fill_value_list)

方案2:使用字典映射实现(代码更简洁)

# 构建首字符和填充值的映射关系
match_dict = {"9":"data1", "7":"data2", "3":"data3", "6":"data4"}
# 提取DV2首字符后直接映射赋值
df["DVZ"] = df["DV2"].astype("str").str[0].map(match_dict)

运行结果

两种方案运行后均可得到预期输出:

DV1DV2DVZ
9412941data1
9434911data1
9412717data2
3114311data3
6314631data4
6622662data4

内容的提问来源于stack exchange,提问作者ViciOus CircLe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:24:26