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

如何在Python DataFrame中根据Circuit列条件新增Type列?

解决DataFrame新增Type列的问题

咱们先拆解下你现有代码里的几个核心问题,这也是导致运行失败的关键:

代码中的错误点

  • 字符串与数字直接比较:你的Circuit列是object类型(本质是字符串),直接用df5["Circuit"] >= 1000会触发类型错误,字符串没法和整数直接做大小比较。
  • .any()的误用:condition_2 = df5["Circuit"].str.contains('[a-zA-Z]').any()里的.any()会把整列的判断结果合并成一个单一布尔值(只判断列里是否存在符合条件的项),而不是逐行生成判断结果,这会让np.select无法匹配每行的规则。
  • condition_3逻辑错误:你写的(df5["Circuit"].isdigit()) & (df5["Circuit"] <= 9999)既存在字符串和数字比较的问题,也没排除已经满足condition_1的情况,正确逻辑应该是「是纯数字但长度不是4位」。

修正后的代码

我们可以通过纯数字校验+字符串长度判断来适配object类型的列,完美匹配你的规则:

import numpy as np
import pandas as pd

# 模拟你的原始DataFrame
data = {
    "Circuit": ["6026", "5011", "50", "9023", "85GA", "90CO"],
    "Size": ["Large", "Very Small", "Small", "Very Small", "Very Small", "Large"]
}
df = pd.DataFrame(data)

# 重新定义符合规则的条件
condition_1 = df["Circuit"].str.isdigit() & (df["Circuit"].str.len() == 4)
condition_2 = df["Circuit"].str.contains('[a-zA-Z]', na=False)
condition_3 = df["Circuit"].str.isdigit() & (df["Circuit"].str.len() != 4)

# 用np.select给Type列赋值
df["Type"] = np.select([condition_1, condition_2, condition_3], ["1", "2", "3"], default="")

print(df)

代码说明

  1. condition_1:先通过str.isdigit()判断是否为纯数字,再用str.len() ==4确保是4位,完美匹配规则1的「4位整数」要求。
  2. condition_2:去掉.any(),直接用str.contains逐行判断是否包含字母,na=False是为了处理可能存在的空值(如果你的数据里有的话)。
  3. condition_3:判断是纯数字但长度不等于4位,正好对应规则3的要求。

运行后就能得到你期望的结果:

Circuit        Size Type
0    6026       Large    1
1    5011  Very Small    1
2      50       Small    3
3    9023  Very Small    1
4    85GA  Very Small    2
5    90CO       Large    2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:53:00