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

如何基于条件在Pandas DataFrame中创建新列?

嘿,这问题不难解决,我给你两种实用的方法,都是Pandas里常用的操作,你可以按需选择:

方法一:用Numpy的where(高效向量操作,推荐)

这种方法是向量级别的运算,比逐行处理快很多,适合大数据量的情况:

首先先准备好你的DataFrame:

import pandas as pd
import numpy as np

d = {'find_no': [1, 2, 3], 'zip_code': [32351, 19207, 8723]}
df = pd.DataFrame(data=d)

然后直接添加新列,这里我们把新列命名为zip_valid:

# 先把zip_code转成字符串,判断长度是否为5;满足就返回True,否则返回对应的find_no
df['zip_valid'] = np.where(df['zip_code'].astype(str).str.len() == 5, True, df['find_no'])

如果你的zip_code可能存在非数字的情况(比如字符串格式的"323a1"),那可以用正则表达式做更严格的匹配,确保是纯5位数字:

# 用正则^\d{5}$匹配严格的5位数字,更严谨
df['zip_valid'] = np.where(
    df['zip_code'].astype(str).str.match(r'^\d{5}$'), 
    True, 
    df['find_no']
)

方法二:用apply逐行处理(适合复杂逻辑)

如果之后你需要给判断逻辑加更多条件,逐行处理的方式更灵活:

def check_zip_valid(row):
    # 转成字符串后检查是否是5位纯数字
    zip_str = str(row['zip_code'])
    if zip_str.isdigit() and len(zip_str) == 5:
        return True
    else:
        return row['find_no']

# 按行应用函数,生成新列
df['zip_valid'] = df.apply(check_zip_valid, axis=1)

最终效果

运行完上面的代码后,你的DataFrame会变成这样:

find_no  zip_code zip_valid
0        1     32351      True
1        2     19207      True
2        3      8723         3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:27:36