如何基于条件在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
相关产品推荐
相关产品推荐

